簡體   English   中英

斷言字符串列表包含忽略大小寫的字符串

[英]Assert that a list of strings contains a string ignoring case

我正在使用 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>>)

誰能幫我解決這個錯誤?

謝謝。

使用equalToIgnoringCase

assertThat("Has potential promotion", b2BCartPage.getPromotionTexts(), hasItem(equalToIgnoringCase(messages.getString("cart.promotion.attention"))));

您可以創建自己的匹配器:

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")));
}

也許你會嘗試一下assertj

@Test
void containsIgnoreCase() {
    List<String> given = Arrays.asList("Alpha", "Beta");

    assertThat(given).anyMatch(s -> s.equalsIgnoreCase("alpha"));
    // if you favor method references over lamdas
    assertThat(given).anyMatch("alpha"::equalsIgnoreCase);
}

assertj 的一大優點是您可以輕松使用代碼完成功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM