我是否需要验证与模拟的交互,或者只是检查方法输入和输出



是否有必要验证与 Mock 对象的交互?假设我有一个类:

Class A{
    B b;
    public A(B b){
       this.b = b;
    }
    int getObjectFromDatabase(int id){
       Object o = b.get(id);
       // do some extra work
       return result
    }
}

现在我正在测试getObjectFromDatabase方法。我已经通过了 B 类的模拟对象。我是否需要验证是否调用b.get(id)的交互?或者只检查我得到的输入和输出结果是个好主意?

通常,验证是否发生了存根调用是不必要的,这会导致测试变得脆弱(即使实现保持正确也会失败的测试(。在您的情况下,是否调用get(id)或调用多少次可能无关紧要;返回的对象是否正确才重要,并且正确的结果可能需要在某个时候调用b.get(id)

Mockito在其verify(T) Javadoc中有一些明确的建议:

尽管可以验证存根调用,但通常它只是多余的。假设您已经存根了 foo.bar((。如果你的代码关心 foo.bar((返回什么,那么其他东西就会中断(通常在verify((被执行之前(。如果你的代码不关心 get(0( 返回什么,那么它不应该被存根。不服气?看这里。

尽管在测试

缓存或延迟加载行为时,或者在交互是测试行为的关键部分的其他情况下,verify(b).get(id)一定次数(包括零次(可能是有意义的,但请尽量测试正确的输出/状态,而不是验证预期的交互

相关内容

  • 没有找到相关文章

最新更新