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”)是的,昆仑。如果列表中有100个元素,那么检查所有元素而不是在第一次不匹配时失败会更好。此外,在错误输出中,很难看到100个元素中的哪一个导致断言失败。它做它的工作,但是。为什么不呢?看看这两个列表是否与示例中的大小相同或相等