JUnit规范在显示重载的asserEquals方法时为开发人员提供以下签名:
assertEquals([TYPE] expected, [TYPE] actual)
如果在业务环境中逻辑上更改期望参数的顺序,请考虑:
// Class provides correct surname based on name or age etc.
class SurnameProvider {
static String getSurnameForName(String name) {
// implementation
}
}
@org.junit.Test
public void test() {
String retrievedSurname = SurnameProvider.getSurnameForName("Vilde");
String expectedSurname = "Hansen";
assertEquals(retrievedSurname, expectedSurname); // here expected value is second
}
订单(实际第一和预期第二)是否会造成任何风险或非常不适当?
答案 0 :(得分:1)
当断言失败时,该顺序会影响JUnit框架生成的错误消息。请参阅以下单元测试代码:
int numberOfHoursPerDay = 2+6*9-5;
Assertions.assertEquals(24, numberOfHoursPerDay);
这将生成以下错误消息:
预期:<24>,但仍是:<51>
因此,您可以轻松查看并检查:“嗯,应该是24,为什么返回51?”。如果您这样更改顺序:
int numberOfHoursPerDay = 2+6*9-5;
Assertions.assertEquals(numberOfHoursPerDay, 24);
您将收到以下消息:
预期:<51>,但仍是:<24>
现在您正在思考:“嗯,24听起来不错,但是为什么应该是51?”当您尝试对其进行修复时,您会看到“等等,为什么现在应该是38?不应该像以前那样是51?不,请稍等,应该是24。怎么了??”。
因此,更改值的顺序只会使您和所有正在运行/使用单元测试的人感到困惑。
答案 1 :(得分:0)
我不知道这有什么风险。而且NullPointerException仅在取消引用空对象时调用方法时才会发生,因此在您的示例中不应发生。
但是,代码约定将期望值放在实际值之前。这基本上是行业遵循的标准。