Java 断言集合中的每个字符串都包含子字符串的最佳方法?

Java 断言集合中的每个字符串都包含子字符串的最佳方法?,java,junit,hamcrest,Java,Junit,Hamcrest,断言字符串集合中的每个元素都包含特定子字符串的最佳方法是什么 差不多 List<String> list = Arrays.asList("xyfoobar", "foobarxy", "xyfoobarxy"); assertThat(list, eachElementContains("foobar")); // pass List List=Arrays.asList(“xyfoobar”、“foobarxy”、“xyfoobarxy”); 资产(列表,每一项内容(“foo

断言字符串集合中的每个元素都包含特定子字符串的最佳方法是什么

差不多

List<String> list = Arrays.asList("xyfoobar", "foobarxy", "xyfoobarxy");

assertThat(list, eachElementContains("foobar")); // pass
List List=Arrays.asList(“xyfoobar”、“foobarxy”、“xyfoobarxy”);
资产(列表,每一项内容(“foobar”);//通过
一些简单的东西,如:

list.forEach(string -> {
    assertTrue(string.contains("foobar"));
});
这不使用Hamcrest匹配程序,但具有相同的语义。

如果使用AssertJ:

import static org.assertj.core.api.Assertions.assertThat

您可以执行以下操作:

List List=Arrays.asList(“xyfoobar”、“foobarxy”、“xyfoobarxy”);
list.forEach(entry->assertThat(entry).descripbedas(“应该包含'foobar')).contains(“foobar”);

我想这会奏效的

         List<String> result = list.stream()                // convert list to stream
             .filter(str ->str.indexOf("foobar")!=-1)     // collects all "foobar" substring
             .collect(Collectors.toList());              // collect the output and convert streams to a List

 assertThat(list.equals(result)).isTrue();
List result=List.stream()//将列表转换为流
.filter(str->str.indexOf(“foobar”)!=-1)//收集所有“foobar”子字符串
.collect(Collectors.toList());//收集输出并将流转换为列表
断言(list.equals(result)).isTrue();

一个简单的解决方案是使用hamcrest库。请尝试:

import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.everyItem;

import java.util.Arrays;
import java.util.List;

import org.junit.Test;

public class MyTest {

    @Test
    public void test() {
        List<String> list = Arrays.asList("xyfoobar", "foobarxy", "xyfoobarxy");
        assertThat(list, (everyItem(containsString("foobar"))));
    }
}
导入静态org.hamcrest.CoreMatchers.containssString;
导入静态org.hamcrest.CoreMatchers.everyItem;
导入java.util.array;
导入java.util.List;
导入org.junit.Test;
公共类MyTest{
@试验
公开无效测试(){
List List=Arrays.asList(“xyfoobar”、“foobarxy”、“xyfoobarxy”);
资产(列表,(每个项目(包含字符串(“foobar”)));
}
}

顺便说一句,lambda的大括号在这里是多余的。是的,我经历了希望所有lambda都放在一行的阶段,以及希望所有内容都展开的其他阶段,目前处于展开阶段:p这将对列表中的每个元素进行断言。我想他想要的是一个断言。有什么理由让他更喜欢这个断言吗?我不熟悉断言变量的细节,因此不知道这是否会导致性能影响。如果是这样,您还可以使用
assertTrue(list.stream().allMatch(s->s.contains(“foobar”)