gpt4 book ai didi

java - 使用 JUnit 和 AssertJ 测试数组是否包含元素

转载 作者:行者123 更新时间:2023-11-30 10:12:13 25 4
gpt4 key购买 nike

我使用 JUnit 4.12 和 AssertJ 3.11.0 进行了以下单元测试,并获得了有趣的结果。 helloTest绿色worldTest红色

@Test
public void helloTest() {
Object[] array = new Object[2];
String[] firstElement = new String[]{"Hello"};
String[] secondElement = new String[]{"World"};
array[0] = firstElement;
array[1] = secondElement;
assertThat(array).containsExactlyInAnyOrder(firstElement, secondElement);
}

@Test
public void worldTest() {
Object[] array = new Object[1];
String[] element = new String[]{"Hello"};
array[0] = element;
assertThat(array).containsExactlyInAnyOrder(element);
}

AssertJ 的结果是

 java.lang.AssertionError: 
Expecting:
<[["Hello"]]>
to contain exactly in any order:
<["Hello"]>
elements not found:
<["Hello"]>
and elements not expected:
<[["Hello"]]>

但为什么呢?

最佳答案

这是类型的问题。以下测试将通过:

@Test
public void worldTest() {
String[][] array = new String[1][];
String[] element = new String[]{"Hello"};
array[0] = element;
assertThat(array).containsExactlyInAnyOrder(element);
}

您的 worldTest 失败,因为您试图断言 Object[] 类型的对象包含 String[] 类型的元素。您正在使用带有此声明的方法进行此断言:

ObjectArrayAssert<ELEMENT> containsExactlyInAnyOrder(ELEMENT... values)

此方法期望传入类型与检查中的类型相匹配。在我上面的示例中,这是真的,因此测试通过了。在您的 worldTest 版本中,这是不正确的,因为一种类型是 String[] 而另一种类型是 Object[]

关于java - 使用 JUnit 和 AssertJ 测试数组是否包含元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51988064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com