假设以下是正在测试的类:
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/