共享变量的测试方法
Testing methods which share variables
我有一个测试:
@Test
testLogin {
String returnValue = login(username, password)
}
此测试完成后,我将在单独的测试中测试 returnValue
的值。 returnValue
也是另一个方法的方法参数:
@Test
testVal {
performTest(returnValue)
}
为了实现这一点,我可以将 returnValue 声明为全局变量,然后使用 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
确保测试 运行 的顺序,但这似乎是一种非标准且不干净的方法?
这是否意味着正在测试的代码应该重构?
有哪些选择?
这样的测试
@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
方法什么都不做,return 值将不正确。
此示例使用 hamcrest 以获得更好的诊断和可读性。您也可以使用 assertEquals
.
关于您关于测试共享变量的问题,非常重要的是您的测试(无论它们是单元测试、集成测试还是验收测试)不共享任何东西并且是独立的。否则,您将 运行 陷入测试失败等问题,因为另一个测试没有 运行 或者测试 运行 的顺序不同。您应该能够 运行 以任何顺序进行任何测试子集。
您还应该考虑一个更好的测试名称,它描述了被测代码应该做什么。例如 successfulLoginReturnsExpectedResponseCode()
.
我有一个测试:
@Test
testLogin {
String returnValue = login(username, password)
}
此测试完成后,我将在单独的测试中测试 returnValue
的值。 returnValue
也是另一个方法的方法参数:
@Test
testVal {
performTest(returnValue)
}
为了实现这一点,我可以将 returnValue 声明为全局变量,然后使用 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
确保测试 运行 的顺序,但这似乎是一种非标准且不干净的方法?
这是否意味着正在测试的代码应该重构?
有哪些选择?
这样的测试
@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
方法什么都不做,return 值将不正确。
此示例使用 hamcrest 以获得更好的诊断和可读性。您也可以使用 assertEquals
.
关于您关于测试共享变量的问题,非常重要的是您的测试(无论它们是单元测试、集成测试还是验收测试)不共享任何东西并且是独立的。否则,您将 运行 陷入测试失败等问题,因为另一个测试没有 运行 或者测试 运行 的顺序不同。您应该能够 运行 以任何顺序进行任何测试子集。
您还应该考虑一个更好的测试名称,它描述了被测代码应该做什么。例如 successfulLoginReturnsExpectedResponseCode()
.