2017-03-02 20 views
0

私は、文字列のリストに大文字小文字を無視して、文字列が含まれていることを主張するためにHamcrestマッチャーを使用しています。次のように私のコードは次のとおりです。文字列のリストに大文字小文字を無視した文字列が含まれていると主張してください。

assertThat("myList has the string", myList, Matchers.hasItem(Matchers.equalToIgnoringCase(string))); 

をしかし、私のJavaコンパイラは、このラインについて不平を言っている:

cannot find symbol 
[ERROR] symbol : method assertThat(java.lang.String,java.util.List<java.lang.String>,org.hamcrest.Matcher<java.lang.Iterable<? super java.lang.Object>>) 

誰もがこのエラーで私を助けてもらえますか?

ありがとうございました。

+0

私は思う 'assertThat'のみ2つのパラメータを取ります。あなたは3つを通過しています。 – GriffeyDog

+0

assertThatは失敗の理由も取り入れることができます。 –

+0

その行が私のためにコンパイルされます。どのJavaのバージョンを使用していますか? HamcrestとJUnit JARのどちらのバージョンを使用していますか? (私はJava 8アップデート122、hamcrest-all 1.3、JUnit 4.12を使用しています。) –

答えて

0

あなたがあなた自身のマッチャーを作成することができます。

package com.melorriaga.movies.common; 

import org.hamcrest.Description; 
import org.hamcrest.Factory; 
import org.hamcrest.Matcher; 
import org.hamcrest.TypeSafeMatcher; 

public class CaseInsensitiveSubstringMatcher extends TypeSafeMatcher<String> { 

    private final String subString; 

    private CaseInsensitiveSubstringMatcher(final String subString) { 
     this.subString = subString; 
    } 

    @Override 
    protected boolean matchesSafely(final String actualString) { 
     return actualString.toLowerCase().contains(this.subString.toLowerCase()); 
    } 

    @Override 
    public void describeTo(final Description description) { 
     description.appendText("containing substring \"" + this.subString + "\""); 
    } 

    @Factory 
    public static Matcher<String> containsIgnoringCase(final String subString) { 
     return new CaseInsensitiveSubstringMatcher(subString); 
    } 
} 

使用法:

@Test 
public void test() { 
    List<String> myList = Arrays.asList("a", "b", "c"); 
    assertThat("myList has the string", myList, hasItem(containsIgnoringCase("b"))); 
} 
関連する問題