Mockito : メソッド内で作成されたオブジェクトでメソッドが呼び出されたことを確認するにはどうすればよいでしょうか? 質問する

Mockito : メソッド内で作成されたオブジェクトでメソッドが呼び出されたことを確認するにはどうすればよいでしょうか? 質問する

私はMockitoを初めて使います。

以下のクラスの場合、Mockito を使用して、が呼び出されたsomeMethod後に が正確に 1 回呼び出されたことをどのように検証できますか?foo

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

以下の確認の電話をしたいのですが、

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

barは のモックインスタンスですBar

ベストアンサー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 (テスト駆動開発) がコードの設計をどのように推進できるかを示す例です。

おすすめ記事