1. ホーム
  2. java

[解決済み] Mockitoは、引数が特定のプロパティ/フィールドを持っていることを確認できますか?

2023-06-08 07:44:38

質問

このクラスをモックしているとします Foo

class Foo {
  public void doThing(Bar bar) {
    // ...
  }
}

で、これは Bar

class Bar {
  private int i;
  public int getI() { return i; }
  public void setI(int i) { this.i = i; }
}

Mockitoのverify機能で Foo#doThing(Bar) のインスタンスがモック上で呼び出されたかどうかを確認することができます。 Bar または任意の BarMockito.any(Bar.class) , で呼び出されたことを確認する方法はありますか? Bar で呼び出されたが、特定の値で i または Bar#getI() ?

私が知っていることは、可能です。

Foo mockedFoo = mock(Foo.class);
Bar someBar = mock(Bar.class);
...
verify(mockedFoo).doThing(someBar);
verify(mockedFoo).doThing(any(Bar.class);

私が知りたいのは、ある特定の文字列に対して Bar が引数として渡されたことを確認する方法があるかということです。

どのように解決するのですか?

Mockito 2.1.0以降、Java 8では、argThatにラムダをそのまま渡すことができます。 に渡すことができますので、独自の引数マッチャーは必要ありません。OPの例では、以下のようになります。

verify(mockedFoo).doThing(argThat((Bar aBar) -> aBar.getI() == 5));

これは、Mockito 2.1.0時点では ArgumentMatcher は関数型インタフェースだからです。