一尘不染

Mockito:如何验证在方法内创建的对象上是否调用过方法?

java

我是Mockito的新手。

给定下面的类,如何someMethod在调用后使用Mockito验证一次foo被调用的对象呢?

public class Foo
{
    public void foo(){
        Bar bar = new Bar();
        bar.someMethod();
    }
}

我想打以下电话,

verify(bar, times(1)).someMethod();

bar的模拟实例在哪里Bar


阅读 359

收藏
2020-03-23

共1个答案

一尘不染

如果注入Bar实例,或用于创建Bar实例的工厂(或其他483种方法之一),则你将具有执行测试所需的访问权限。

工厂示例:

给定一个这样的Foo类:

public class Foo {
  private BarFactory barFactory;

  public Foo(BarFactory factory) {
    this.barFactory = factory;
  }

  public void foo() {
    Bar bar = this.barFactory.createBar();
    bar.someMethod();
  }
}

在你的测试方法中,你可以像这样注入BarFactory:

@Test
public void testDoFoo() {
  Bar bar = mock(Bar.class);
  BarFactory myFactory = new BarFactory() {
    public Bar createBar() { return bar;}
  };

  Foo foo = new Foo(myFactory);
  foo.foo();

  verify(bar, times(1)).someMethod();
}

奖励:这是TDD如何推动代码设计的一个示例。

2020-03-23