Hamcrest содержит совпадение InAnyOrder, если строка содержит - PullRequest
0 голосов
/ 04 января 2019

Допустим, у меня есть

@Test
public void iterable_matches_order () {

    List<String> cloths = Lists.newArrayList("shirts", "shoes", "pants", "socks");

    assertThat(cloths, containsInAnyOrder("shi", "sho", "pan", "soc"));
}

Я хочу, чтобы это прошло, потому что shi содержится в shirts, sho содержится в shoes и так далее. containsInAnyOrder, кажется, проходит только тогда, когда каждая запись является точным соответствием.

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Вы можете попробовать использовать ниже, но, к сожалению, вы можете проверить только одну подстроку за раз. Вам нужно будет иметь несколько утверждений, так как вы не будете знать, какая подстрока потерпела неудачу в списке.

assertThat (одежда, hasItem (содержит ("ши")))

0 голосов
/ 05 января 2019

По умолчанию containsInAnyOrder соответствует заданным элементам методом equals. Но вы можете предоставить произвольные субматчеры. В вашем примере вы можете использовать метод Matchers.containsString:

assertThat(cloths, containsInAnyOrder(containsString("shi"), containsString("sho"),
    containsString("pan"), containsString("soc")));

Помните, что приведенное выше утверждение также будет успешным, если вы измените порядок элементов в cloths. Если порядок имеет значение, используйте Matchers.contains:

assertThat(cloths, contains(containsString("shi"), containsString("sho"),
    containsString("pan"), containsString("soc")));
0 голосов
/ 04 января 2019

Согласно документации: http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/Matchers.html#containsInAnyOrder(T...) это не соответствует подстроке, а целая строка

assertThat(Arrays.asList("foo", "bar"), containsInAnyOrder("bar", "foo"))

...