1. ホーム
  2. java

[解決済み] Mockito : メソッド内で生成されたオブジェクトでメソッドが呼び出されたことを確認する方法?

2022-03-23 18:43:38

質問

Mockitoの初心者です。

以下のクラスがある場合、Mockito を使って以下のことを確認するにはどうすればよいですか? someMethod の後にちょうど1回起動されました。 foo が起動されたのですか?

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

次のような検証の呼び出しを行いたいと思います。

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

ここで bar のモックインスタンスです。 Bar .

解決方法は?

依存性注入

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();
  }
}

をテストメソッドにインジェクトすることができます。

@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(Test Driven Development)がコードの設計を推進する方法の一例です。