Java assertEquals JUnit方法参数反演是否存在较大风险?

Java assertEquals JUnit方法参数反演是否存在较大风险?,java,junit,Java,Junit,JUnit规范在显示重载的Asserquals方法时为开发人员提供以下签名: assertEquals([TYPE] expected, [TYPE] actual) 例如,如果从逻辑上更改业务上下文中预期参数的顺序,请考虑: // Class provides correct surname based on name or age etc. class SurnameProvider { static String getSurnameForName(String name) {

JUnit规范在显示重载的Asserquals方法时为开发人员提供以下签名:

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
}

订单(实际的第一个和预期的第二个)是否会导致任何风险或非常不合适?

我不知道有任何风险。而NullPointerException只会在反引用null对象时调用方法时发生,因此在您的示例中不应该发生


但是,代码约定将预期值置于实际值之前。这基本上是业界遵循的标准。

当断言失败时,顺序会影响JUnit框架生成的错误消息。请参阅以下单元测试代码:

int numberOfHoursPerDay = 2+6*9-5;
Assertions.assertEquals(24, numberOfHoursPerDay);
这将生成以下错误消息:

预期:但是:

所以你可以很容易地看到并检查:“嗯,它应该是24,为什么它返回51?”。如果您这样更改顺序:

int numberOfHoursPerDay = 2+6*9-5;
Assertions.assertEquals(numberOfHoursPerDay, 24);
您将收到以下消息:

预期:但是:

现在你在想:“嗯,24听起来不错,但为什么它应该是51?”当你试图修复它时,你会得到“等等,为什么它现在应该是38?它不应该像以前一样是51吗?不,等等,它应该是24。发生了什么事?”


因此,更改值的顺序只会混淆您和运行/使用单元测试的每个人。

我不确定我是否理解这个问题。唯一会改变的是失败消息。对于assertEquals(“Hansen”,null),失败消息会有所不同;和assertEquals(null,“Hansen”)?您应该使用Asset.isNull()。如果你传递一个字符串文字是没有意义的,因为它总是假的。我删除了这些代码行,因为它们有误导性,并且与问题主题一致。文字测试不是我的问题。@Sinny当然——预期值和实际值会颠倒过来。