sublist/partial 匹配的 Hamcrest 匹配器?
Hamcrest matcher for a sublist/partial match?
假设我有一个实际列表 [1, 2, 3, 4],我想检查它是否包含子列表 [2, 3](即顺序也很重要)。是否有执行此操作的现有匹配器?
(有一个名称不正确的 hasItems
方法,它只检查实际列表是否匹配预期列表中的任何 one 项....)
我认为没有这样的预定义Matcher。我在 JUnit 之上使用 AssertJ,所以我可以这样处理这个案例:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.assertj.core.api.Assertions;
import org.junit.Test;
public class TestContains2 {
@Test
public void test_contains() {
List<Integer> a = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Assertions
.assertThat(a)
.containsSequence(2, 3);
}
}
如果可以,自己写一个。
应该是这样的:
public class HasSublist<T> extends TypeSafeMatcher<T> {
@Override
public boolean matchesSafely(List<T> subList) {
//Logic if sublist exist ...
return true;
}
public static <T> Matcher<T> hasSubList(List<T> containsSublist) {
return new HasSublist<T>(containsSublist);
}
}
假设我有一个实际列表 [1, 2, 3, 4],我想检查它是否包含子列表 [2, 3](即顺序也很重要)。是否有执行此操作的现有匹配器?
(有一个名称不正确的 hasItems
方法,它只检查实际列表是否匹配预期列表中的任何 one 项....)
我认为没有这样的预定义Matcher。我在 JUnit 之上使用 AssertJ,所以我可以这样处理这个案例:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.assertj.core.api.Assertions;
import org.junit.Test;
public class TestContains2 {
@Test
public void test_contains() {
List<Integer> a = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Assertions
.assertThat(a)
.containsSequence(2, 3);
}
}
如果可以,自己写一个。
应该是这样的:
public class HasSublist<T> extends TypeSafeMatcher<T> {
@Override
public boolean matchesSafely(List<T> subList) {
//Logic if sublist exist ...
return true;
}
public static <T> Matcher<T> hasSubList(List<T> containsSublist) {
return new HasSublist<T>(containsSublist);
}
}