java - 如何验证给定类的特定构造函数是否被调用?

标签 java unit-testing junit testng jmockit

假设以下是被测试的类:

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

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

我不是在寻找手动或非自动的答案。我正在寻找一个答案,该答案使用 JUnit 或 TestNG 等工具,借助模拟和 spy 工具(最好是 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/

相关文章:

java - RequestFactory 理论 : Why is Locator<>. find() 被如此频繁地调用?

ruby - 测试 ruby 脚本

java - 在 jMock 期望中允许 Object 或 null

unit-testing - 当参数具有grailsparametermap属性时,如何测试验证错误?

javascript - 使用 Jest 在 vanilla js 中测试 AJAX

java - Powermock ExceptionInInitializerError 与 Junit

java - JUnit 产生奇怪的 AssertionFailedError

java - 为 toString() 格式的输出重载或覆盖 int method() ?

java - 为什么我的 if-else block 从来没有被击中,即使它应该被击中? (只需要另一双眼睛。)

Java字符串格式问题。点后的两个元素