我如何让JMockit不模拟某种方法?

时间:2017-05-02 21:37:40

标签: java jmockit

我有一个包含以下方法的类,我不希望它返回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

0 个答案:

没有答案