argThat プラスラムダ
これが引数の検証に失敗する方法です。
    verify(mock).mymethod(argThat(
      (x)->false
    ));
どこ
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
argThat プラスアサート
上記のテストは「言う」でしょうExpected: lambda$... Was: YourClass.toSting...。ラムダでアサートを使用すると、より具体的な失敗の原因を取得できます。
    verify(mock).mymethod(argThat( x -> {
      assertThat(x).isNotNull();
      assertThat(x.description).contains("KEY");
      return true;
    }));
ただし、これは1つのメソッド呼び出しでのみ機能します。検証されたメソッドが2回以上呼び出された場合、mockitoは呼び出されたすべての組み合わせを各検証者に渡します。そのため、mockitoは、検証者trueが引数セットの1つに対してサイレントに戻りfalse、他の有効な呼び出しに対して(アサート例外なし)であることを期待します。その期待は、1つのメソッド呼び出しでは問題ではありません。1回だけtrueを返す必要があります。
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.verify;
今テストは言う:Expected: Obj.description to contain 'KEY'. Was: 'Actual description'。注:assertJアサーションを使用しましたが、どのアサーションフレームワークを使用するかはあなた次第です。
argThat 複数の引数を持ちます。
を使用する場合argThat、すべての引数に一致を指定する必要があります。例えば:
    verify(mock).mymethod(eq("VALUE_1"), argThat((x)->false));
    // above is correct as eq() is also an argument matcher.
  verify(mock).mymethod("VALUE_1", argThat((x)->false));
  
  // above is incorrect; an exceptoin will be thrown, as the fist arg. is given without an argument matcher.
どこ:
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
eq マッチャー
引数が等しいかどうかを確認する最も簡単な方法:
verify(mock).mymethod(eq(expectedValue));
// NOTE:   ^ where the parentheses must be closed.
直接の議論
参照による比較が許容できる場合は、次に進みます。
verify(mock).mymethod(expectedArg);
// NOTE:   ^ where the parentheses must be closed.
元の質問の失敗の根本原因は、括弧の間違った場所でした:verify(mock.mymethod...。それは間違っていました。権利は:verify(mock).*