2016-01-04 67 views
2

假设我有一个实际的List [1,2,3,4],我想检查它是否包含子列表[2,3](即顺序也很重要)。有没有一个现有的匹配器可以做到这一点?Hamcrest匹配器的子列表/部分匹配?

(有一个不良的命名hasItems方法,该方法只检查实际列表在预期列表中的任何一个项目匹配....)

+2

也许使用Collections.indexOfSubList? – dimitrisli

+0

@dimitrisli感谢您的建议。我可能会在一个客户匹配器中使用它。 –

回答

4

如果可以,请自己写。

看到Writing custom matchers

它应该是这样的:

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

我觉得不存在这样的预定义的匹配器。我在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); 
    } 
}