2016-01-04 59 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); 
    } 
}