我有一个包含以下方法的类,我不希望它返回null:
public String getAutoSaveDir() {
if (autoSaveDir == null || autoSaveDir.isEmpty()) {
return System.getProperty("java.io.tmpdir");
} else {
return autoSaveDir;
}
}
由于其他原因,我需要使用@Injectable
来模拟这个类。*不幸的是,这意味着此方法返回null:
@Tested
private MyClass myClass;
@Injectable
private ClassContainingMethod classContainingMethod;
@Test
public void myTest() {
// Calls classContainingMethod.getAutoSaveDir()
myClass.saveFile();
}
这很遗憾,因为getAutoSaveDir()
返回null。我确认System.getProperty("java.io.tmpdir")
不返回null,所以看起来JMockit正在模拟返回null的方法,当我不想要它时。
我知道我可以设置一个Expectations
块来告诉它只返回System.getProperty("java.io.tmpdir")
,但是如果没有嘲讽那么嘲笑它会返回它会返回的东西似乎真的很傻。
我怎样才能让JMockit不模仿这个方法?
我正在使用JMockit 1.22(希望使用更高版本,但我们有几个模拟私有方法的实例,在以后的版本中不允许这样做。)
*我必须使用@Injectable,因为该字段是使用@Autowired注释的。如果我尝试使用实例,我会收到此错误:java.lang.IllegalStateException: Missing @Injectable for field MyClass#classContainingMethod, of type com.example.ClassContainingMethod