在这个问题的范围内,我不想遍历“断言” 。 我的目标是动态构建匹配器,而示例代码无法反映我正在尝试做的全部工作。
我正在尝试构建可在不同环境中运行的测试
我的测试需要使用参数来构建,并检查匹配器中未知数量的元素。
请参见下面的代码:如何动态构建匹配器?
我尚未找到任何解决方案。 Hamcrest版本是1.3,我希望坚持使用它,因为该项目使用spring-boot的依赖管理(BOM)
请参阅代码中的“帮助”部分
package com.test;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.MatcherAssert.assertThat;
import java.util.Arrays;
import java.util.List;
import org.hamcrest.Matcher;
import org.junit.Test;
public class SomeTest {
private String anArray[] = { "a1", "b2", "c3", "d4" };
private List<String> aList = Arrays.asList(anArray);
@Test
public void doBothTests() {
testStaticValues();
String mustHaveItemsContainingString[] = { "a", "2", "c" };
testDynamicValues(mustHaveItemsContainingString);
}
private void testStaticValues() {
assertThat(aList,
hasItems(
containsString("a"),
containsString("2"),
containsString("c"))
);
}
private void testDynamicValues(String[] mustHaveItemsContainingString) {
Matcher<Iterable<String>> hasItems = null;
// HELP!!!!
// hasItems = new Matcher<Iterable<String>>;
for (String testString : mustHaveItemsContainingString) {
Matcher<String> matcher = containsString(testString);
// HELP!!!
// hasItems . append(matcher)
}
assertThat(aList, hasItems);
}
}