我该如何模拟一个类的任意对象。
我的目标是让任何文件对象在调用exists()
方法时返回true
。
例如:
Mockito.mock(File.class)
//return true for any object of File that calls exist()
File file = new File("thisDoesntExist");
assertEquals(true, file.exists());
如何实现这个?
这是被测试的方法(简化版)
@Override
public void load(InputArchive archive, int idx)
{
archive.beginNode("Files", idx);
File file = new File(archive.load("Path"));
if(file.exists())
{
//if it gets here it'll pass the test
}
}
我认为以上方法可以解决我的问题,但如果有更好/另一种解决方法,我会告诉你我为什么要这样做:
我之所以想这样做是因为我正在读取一个XML文件,该文件将基于<file>
标记创建一个文件对象,然后测试此fileObjectCreatedFromXML
是否存在,如果存在,则执行一些其他必要的操作。
File
,它总是从exists
返回true
),否则没有太多可以做的。 - Mick Mnemonicnew
关键字创建的对象是无法进行模拟的,你必须提供一些方式将模拟对象注入到该方法中。其中一种方式是让你的被测类使用一个小的辅助类(例如FileFactory
),并通过构造函数注入该类,以便创建文件。 - Mick Mnemonicload
方法具有void
返回类型,你真正能够测试的只是该方法可能产生的副作用。如果你想测试InputArchive.load()
是否从正确的路径加载,那么你应该为该类编写一个单独的测试。 - Mick Mnemonic