我总是想知道像TestNG这样的库assertEquals
中实际和预期的含义究竟是什么。
如果我们阅读Java Docs,我们会看到:
public static void assertEquals(... actual, ... expected)
Parameters:
actual - the actual value
expected - the expected value
根据我的理解,expected
值是已知值,因此我们期望的值和actual
值是我们要验证的值。例如,假设我们要测试始终必须返回fooBar
的函数56
。
在这种情况下,我会这样做:assertEquals(sth.fooBar(), 56)
。但是通过快速搜索GitHub,似乎人们会反过来这样做,所以assertEquals(56, sth.fooBar())
。但是,当我们甚至不知道这个价值时,期望值如何sth.fooBar()
?似乎sth.fooBar()
是我们与我们已经知道的预期值进行比较的实际值。
我知道测试的正确性没有区别,但我想遵循“正确”的方式。
答案 0 :(得分:14)
大多数测试框架(xUnit系列)都基于JUnit框架。 JUnit中的Assert
函数族具有(expected, actual)
格式;它成为一种惯例,大多数其他框架都遵循该惯例。
某些框架(如TestNG或NUnit 2.4+ for .NET)颠倒了该顺序(使用基于约束的NUnit模型)以提高可读性(“确保实际值为56 “感觉比”更自然“确保56是实际值”)。
底线是:坚持框架的惯例。如果使用JUnit,请将期望值放在第一位。如果您使用TestNG,请先将实际值放入。你是对的,当你意外地反转参数时,测试结果没有任何区别。但它会对您从失败的测试中获得的默认消息产生重大影响。当JUnit中的颠倒 assertEquals(ShouldBeTrueButReturnsFalse(), true)
失败时,默认消息显示“ expected [false]但找到[true] ”,它应该说“期望[true]但发现[false] “。至少可以说这是令人困惑的,你不应该处理可能误导的消息。
您提供的Github链接中的某些单元测试不符合约定并且具有相同的问题。不要那样做。 坚持框架惯例。
答案 1 :(得分:5)
答案很简单。 JUnit具有相反的参数顺序。请参考以下示例:
JUnit的:
void assertEquals(Object expected, Object actual)
TestNG的:
void assertEquals(int actual, int expected)
答案 2 :(得分:3)
我也有同样的困惑。
但混淆是因为Github搜索返回了TestNG和junit的assertEquals语法。您对预期的&实际的理解。
TestNG: assertEquals(Object actual, Object expected)
junit: assertEquals(Object expected, Object actual)
例如,在testNG下面的代码结果
int x=1+2;
assertEquals(x,2);
是:
java.lang.AssertionError: expected [2] but found [3]
Expected :2
Actual :3
答案 3 :(得分:-3)
您可以使用:
String expectedTitles[] = {"value-1", "value-2", "value-3". "value-14")};
List<String> expectedTitlesList = Arrays.asList(expectedTitles);
Assert.assertTrue(expectedTitlesList.contains(("value-to-compare")));
与maven:
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hamcrest/hamcrest-all -->
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3</version>
</dependency>