测试库断言多个对象相等



在为单元测试设计的库中有不同的方法是很常见的,比如

assertEquals
assertTrue
assertFalse

等。(例如Mockito)。

然而,这些方法只比较(等于方法f.e.)两个参数。假设我有四个值,我想比较。

Integer a = 4; 
Integer b = 4; 
Integer c = 4; 
Integer d = 4;

如果我想比较它们,我必须像这样写四行:

assertEquals(a, 4);
assertEquals(b, 4);
assertEquals(c, 4);
assertEquals(d, 4);

我正在寻找的是,一个库,可以接受更多的参数,并检查是否所有的都是相等的

assertAllEquals(a, b, c, d, 4);

我知道这可能不会实现,因为在单元测试中有一个讨论,每次只断言一个事实(这可能会打破概念)。但是,是否有任何测试库提供了这种方便的特性?

如果我想比较它们,我必须像这样写四行:

如果你比较不同的变量,这确实是最好的方法。通过编写单独的断言,您实际上可以确定元素的哪个不等于该值。

如果有这么多独立的变量,单独的断言实际上是一个问题,这指出了太多变量的设计问题。


说了这些,你可以这样做:

Stream.of(a,b,c,d).forEach(e -> assertEquals(4, e));

(注意assertEquals的参数顺序:期望,然后实际。所以,你永远不应该用常数来表示"实际的"参数)。

这至少给出了一个有用的断言,因为它告诉你不等于4的实际值;它没有用,因为它没有告诉你它是哪个变量(a-d)。

您可以使用以下命令获得稍微更有用的错误消息:

List<Integer> actual = List.of(a,b,c,d);
List<Integer> expected = Collections.nCopies(actual.size(), 4);
assertEquals(expected, actual);

这至少为您提供了actual列表中哪个元素与4不同的指示。

最新更新