在为单元测试设计的库中有不同的方法是很常见的,比如
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不同的指示。