断言等于 Junit 中的 2 个列表

2022-08-31 06:23:11

如何在 JUnit 测试用例中的列表之间做出相等断言?列表的内容之间应该平等。

例如:

List<String> numbers = Arrays.asList("one", "two", "three");
List<String> numbers2 = Arrays.asList("one", "two", "three");
List<String> numbers3 = Arrays.asList("one", "two", "four"); 

// numbers should be equal to numbers2
//numbers should not be equal to numbers3

答案 1

对于 junit4!这个问题值得为junit5写一个新的答案。

我意识到这个答案是在问题问完几年后写的,可能这个功能当时还没有出现。但现在,这样做很容易:

@Test
public void test_array_pass()
{
  List<String> actual = Arrays.asList("fee", "fi", "foe");
  List<String> expected = Arrays.asList("fee", "fi", "foe");

  assertThat(actual, is(expected));
  assertThat(actual, is(not(expected)));
}

如果您安装了最新版本的 Junit 和 hamcrest,只需添加以下导入:

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

http://junit.org/junit4/javadoc/latest/org/junit/Assert.html#assertThat(T, org.hamcrest.Matcher)

http://junit.org/junit4/javadoc/latest/org/hamcrest/CoreMatchers.html

http://junit.org/junit4/javadoc/latest/org/hamcrest/core/Is.html


答案 2

不要转换为字符串和比较。这对性能不利。在Junit中,在Corematchers内部,有一个匹配者=>hasItems

List<Integer> yourList = Arrays.asList(1,2,3,4)    
assertThat(yourList, CoreMatchers.hasItems(1,2,3,4,5));

据我所知,这是检查列表中元素的更好方法。


推荐