【问题标题】:How to use Mockito to verify a method is called in another method?如何使用 Mockito 验证一个方法在另一个方法中被调用?
【发布时间】:2018-11-08 19:19:13
【问题描述】:

我有一个带有 publish() 方法的 A 类。在方法中会调用另一个方法,并将A类对象作为参数传递给B类。

public class A {
    public void publish() {
      ClassB classb = new ClassB();
      classb.sendRequest(this)
    }
}

问题是在调用publish()方法的时候,如何使用Mockito来验证sendRequest方法是否被调用?我是 Mockito 的新手。

【问题讨论】:

标签: java unit-testing junit mockito


【解决方案1】:

如果在方法中创建新的 ClassB 实例,则不能使用 Mockito。
您应该重构 publish() 以将 ClassB 作为参数,然后您可以发送 Mockito 模拟而不是真正的 ClassB,并对其进行验证。

像这样:

public class A {

    public void publish(ClassB classb){
        classb.sendRequest(this)
    }
 }

在你的测试中:

ClassB mockClassB = mock(ClassB.class);
A a = new A();
a.publish(mockClassB);

verify(mockClassB, times(1)).sendRequest(any());

【讨论】:

  • 那么在调用classa.publish()时如何测试classb.sendRequest(this)被调用而不带B类作为参数呢?
  • 你不能。你必须重构。您还可以添加 ClassB 成员字段,并使用 setter 设置模拟。但是一些重构是强制性的。
  • @HenlenLee OT:因为调用 As publish 方法的唯一方法是调用其参数传递自身的方法,随之而来的问题是:为什么它需要在类中 @ 987654325@? a.publish(b);的调用者不能直接调用b.sendRequest(a);吗?这将完全消除类A 对类B 的依赖...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
相关资源
最近更新 更多