2017-02-12 23 views
2

私は何を持っていることは、この行を無視している別の文字列が含まれていることを確認します。どうすればいい?私は答えは、このようなクラスのように見えることを働いてきたJB NizetへMockito引数がケース

+1

argThatの使用例:https://static.javadoc.io/org.mockito/mockito-core/2.7.5/org/mockito/ArgumentMatchers.html#argThat(org.mockito.ArgumentMatcher) –

+0

ありがとうございました。私はそれがあなたのリンクが指示するこのページによると、Java 8ラムダを使って1ライナーとしてそれを行うことが可能かどうか疑問に思っています:https://static.javadoc.io/org.mockito/mockito-core/2.7 .5/org/mockito/ArgumentMatcher.html –

答えて

1

the pageでは、「あなたはメソッドを抽出できますか」ということは、Java 8ラムダを使用してこれを1ライナーにすることは可能ですか?

hereからケース非感受性のコードを使用して一列に

verify(mockAppendable) 
    .append(
     argThat(arg -> 
     Pattern.compile(Pattern.quote(msg), Pattern.CASE_INSENSITIVE).matcher(arg).find())); 

彼らはカスタムエラーメッセージを指定するスキップしラムダバージョンを可能にしました。

verify(mockAppendable).append(argThat(containsCaseInsensitive(msg))); 

および方法は、次のように定義されます:

そして、「あなたはメソッドを抽出することができます」によって

は、彼らが意味

完全に再利用可能です
public static ArgumentMatcher<String> containsCaseInsensitive(final string s) { 
    if (s == null) throw new IllegalArgumentException("s is null"); 
    final Pattern pattern = Pattern.compile(Pattern.quote(s), Pattern.CASE_INSENSITIVE); 
    return new ArgumentMatcher<String>() { 

     @Override 
     public boolean matches(String arg) { 
      return arg != null && pattern.matcher(arg).find(); 
     } 

     @Override 
     public String toString() { 
      return String.format("[should have contained, ignoring case, \"%s\"]", s); 
     } 
    }; 
} 

は、新しいクラスの内部でそれを置くことができます例えばMocitoMatchersのようなもので、組み込みmatcherのような多くのテストから呼び出すことができます。

+0

Brilliant。どうもありがとう! –

+0

あなたの "containsCaseInsensitive"の私のバージョンを見てください。そしておそらくあなたを編集しますか? (ヌル引数と少し読みやすくするために)...編集を提出しようとしましたが、私はうんざりして、第三者の査読者はそれを拒否しました... –

+0

あなたはもっと完全かもしれませんが、SOはここにはありませんコピー&ペースト可能なライブラリ品質コード。すべてのヌルチェックと異なるメッセージは、人々が望むならば追加することを選ぶことができるだけの騒音であり、質問に違いを生じさせません。 – weston

0

ありがとう:

class ContainsThisIgnoringCase implements ArgumentMatcher<String> { 
    private String msg; 
    ContainsThisIgnoringCase(String msg){ 
     this.msg = msg; 
    } 
    @Override 
    public boolean matches(String arg) { 
     return arg.toLowerCase().contains(msg.toLowerCase()); 
    } 
    @Override 
    public String toString(){ 
     return msg; 
    } 
} 

はしかし、私はその後、彼のリンクが指示したthe pageに見るもので困惑しています:
a) "あなたは方法を抽出できます"とはどういう意味ですか?
b)Java 8ラムダを使用してこれを1ライナーにすることは可能ですか?

関連する問題