2017-03-02 119 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'只需要兩個參數;你傳球三次。 – GriffeyDog

+0

assertThat也可以採取失敗的原因。 –

+0

該行爲我編譯。您使用的是哪個版本的Java?你還使用哪個版本的Hamcrest和JUnit JAR? (我正在使用Java 8更新122,hamcrest-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"))); 
} 
相關問題