CollectionAssert JUnit中?CollectionAssert JUnit中?(C

2019-05-17 00:28发布

有平行的NUnit的一个JUnit CollectionAssert

Answer 1:

使用JUnit 4.4你可以使用assertThat()与一起Hamcrest码(不用担心,它附带的JUnit,不需要额外.jar )产生复杂的自我描述断言包括对集合进行操作的:

import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.*;
import static org.hamcrest.CoreMatchers.*;

List<String> l = Arrays.asList("foo", "bar");
assertThat(l, hasItems("foo", "bar"));
assertThat(l, not(hasItem((String) null)));
assertThat(l, not(hasItems("bar", "quux")));
// check if two objects are equal with assertThat()

// the following three lines of code check the same thing.
// the first one is the "traditional" approach,
// the second one is the succinct version and the third one the verbose one 
assertEquals(l, Arrays.asList("foo", "bar")));
assertThat(l, is(Arrays.asList("foo", "bar")));
assertThat(l, is(equalTo(Arrays.asList("foo", "bar"))));

使用这种方法,你会自动地得到断言的一个很好的说明,当它失败。



Answer 2:

不是直接的,没有。 我建议使用Hamcrest ,它提供了一套丰富的匹配规则,其使用JUnit(以及其它测试框架)很好地集成



Answer 3:

看看FEST流利的断言。 恕我直言,他们比Hamcrest(同样强大,可扩展等),使用起来更加方便和更好的IDE支持,得益于流畅的界面有。 见https://github.com/alexruiz/fest-assert-2.x/wiki/Using-fest-assertions



Answer 4:

约阿希姆·绍尔的解决方案是好的,但如果你已经有了,你要验证在你的结果预期的数组不起作用。 这可能会来,当你已经在你的测试,你要的结果比较生成或不变的预期,或者你有你所期望的结果要合并多个期望。 因此,而不是使用匹配器,你可以可以只使用List::containsAllassertTrue例如:

@Test
public void testMerge() {
    final List<String> expected1 = ImmutableList.of("a", "b", "c");
    final List<String> expected2 = ImmutableList.of("x", "y", "z");
    final List<String> result = someMethodToTest(); 

    assertThat(result, hasItems(expected1)); // COMPILE ERROR; DOES NOT WORK
    assertThat(result, hasItems(expected2)); // COMPILE ERROR; DOES NOT WORK

    assertTrue(result.containsAll(expected1));  // works~ but has less fancy
    assertTrue(result.containsAll(expected2));  // works~ but has less fancy
}


文章来源: CollectionAssert in jUnit?