假设以下是正在测试的类:

public class MyClass {
    public void doSomething() throws FileNotFoundException {
        FileInputStream fis = new FileInputStream( "someFile.txt" );
        // .. do something about fis
    }
}


使用jMockit用参数FileInputStream( String )调用方法doSomething()时,如何验证构造函数"someFile.txt"是否被调用?

我不是在寻找手动或非自动化的答案。我正在寻找一个答案,该答案采用诸如JUnit或TestNG之类的工具通过模拟和监视工具(最好是jMockit)进行自动化的单元测试。

最佳答案

使用JMockit Expectations API,测试可以像方法调用一样验证构造函数调用。测试只需将类指定为@Mocked。例如:

@Test
public void exampleTestThatVerifiesConstructorCall(@Mocked FileInputStream anyFIS)
{
    new MyClass().doSomething();

    new Verifications() {{ new FileInputStream("someFile.txt"); }};
}


也就是说,我建议避免模拟FileInputStream这样的低级类,它们通常只是被测类的内部实现细节。更好的测试将使用实际文件,并以某种方式检查它是否按预期读取。

关于java - 如何验证给定类的特定构造函数被调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32581996/

10-12 19:44