共享变量的测试方法

时间:2015-03-11 16:46:10

标签: java testing junit

我有一个测试:

@Test
testLogin {
   String returnValue = login(username, password)
}

完成此测试后,我将在单独的测试中测试returnValue的值。 returnValue也是另一种方法的方法参数:

@Test
testVal {
   performTest(returnValue)
}

为了达到这个目的,我可以将returnValue声明为全局变量,然后确保使用@FixMethodOrder(MethodSorters.NAME_ASCENDING)按顺序运行测试,但这似乎是一种非标准和不干净的方法?

这是否意味着应该重新考虑正在测试的代码?

有哪些替代方案?

1 个答案:

答案 0 :(得分:3)

这样的测试

@Test
public void testLogin() {
   String returnValue = login(username, password)
}

没有多大价值。它唯一测试的是方法login不会抛出异常,我很确定它不是你想要测试的。断言在哪里?以下实现满足此测试:

public String login(Object a, Object b) {
    return null;
}

您的测试应如下所示:

@Test
public void successfulLoginReturnsExpectedResponseCode() {
   String responseCode = login(username, password)

   assertThat(responseCode, is(equalTo("SUCCESSFUL_LOGIN")));
}

如果login方法什么都不做,则返回值将不正确。

此示例使用hamcrest来获得更好的诊断和可读性。您也可以使用assertEquals

关于测试共享变量的问题,非常重要的是您的测试(无论是单元测试,集成测试还是验收测试)不共享任何内容并且是独立的。否则,您将遇到诸如测试失败等问题,因为其他测试未运行或测试以不同顺序运行。您应该能够以任何顺序运行任何测试子集。

您还应该考虑更好的测试名称,因此它描述了测试中的代码应该做什么。例如successfulLoginReturnsExpectedResponseCode()