web-dev-qa-db-ja.com

Mockitoを使用してパラメータに2つの部分文字列が含まれているかどうかを確認するにはどうすればよいですか?

テストには、現在次のような行があります。

Mockito.verify(mockMyObject).myMethod(Mockito.contains("Apple"));

パラメータに"Apple""banana"の両方が含まれているかどうかを確認するように変更したいと思います。どうすればいいですか?

27
tttppp

Mockito.matches(String)を使用するだけです。例:

Mockito.verify(mockMyObject).
  myMethod(
    Mockito.matches("(.*Apple.*banana.*)|(.*banana.*Apple.*)"
  )
);
30
Boris Pavlović

最も簡単な解決策は、verify()を複数回呼び出すことだと思います。

verify(emailService).sendHtmlMail(anyString(), eq(REPORT_TITLE), contains("Client response31"));
verify(emailService).sendHtmlMail(anyString(), eq(REPORT_TITLE), contains("Client response40"));
verify(emailService, never()).sendHtmlMail(anyString(), anyString(), contains("Client response30"));
13
ferengra
 Mockito.verify(mockMyObject)
     .myMethod(Mockito.argThat(s -> 
         s.contains("Apple") && s.contains("banana"));
5
Torsten

多分これはもう関係がないかもしれませんが、私はそれをする別の方法を見つけました。トルステンの答えとこの他の 答え に従ってください。私の場合、Hamcrestを使用しました Matchers

Mockito.verify(mockMyObject).myMethod(
   Mockito.argThat(Matchers.allOf(
      Matchers.containsString("Apple"),
      Matchers.containsString("banana"))));
2
Eric