我有一个类,类似于以下内容:
class ClassA {
private static File myDir;
// myDir is created at some stage
private static String findFile(final String fileName) {
for (final String actualBackupFileName : myDir.list()) {
if (actualBackupFileName.startsWith(removeExtensionFrom(backupFile))) {
return actualBackupFileName;
}
}
}
}
基本上,我想通过模拟File类来测试这个类,以便在对其调用list()时,它返回我在测试类中定义的字符串列表。
我已经有了以下代码,但目前它还没有起作用,我可能犯了一些明显的错误 - 我是JMockit的新手 - 任何帮助都将不胜感激!
@Mocked("list") File myDir;
@Test
public void testClassA() {
final String[] files = {"file1-bla.txt"};
new NonStrictExpectations() {{
new File(anyString).list();
returns(files);
}};
String returnedFileName = Deencapsulation.invoke(ClassA.class, "findFile","file1.txt");
// assert returnedFileName is equal to "file1-bla.txt"
}
在运行上面的测试时,我在ClassA中的myDir字段处遇到了NullPointerException - 看起来它没有被正确地模拟?
Deencapsulation
类不再有setField()
方法了(尽管版本 1.3.0 有该方法)。 - cbaldanDeencapsulation
的方法?我需要在@Tested
对象中设置私有静态常量字段。 - Panu Haaramo