【发布时间】:2010-05-05 17:38:11
【问题描述】:
当我们的登台服务器因每周维护而停机时,我们有许多集成测试失败。当登台服务器关闭时,我们会发送一个我可以在集成测试中检测到的特定响应。当我得到这个响应而不是测试失败时,我想知道是否可以跳过/忽略该测试,即使它已经开始运行。这将使我们的测试报告更加简洁。
有人有建议吗?
【问题讨论】:
标签: junit continuous-integration integration-testing
当我们的登台服务器因每周维护而停机时,我们有许多集成测试失败。当登台服务器关闭时,我们会发送一个我可以在集成测试中检测到的特定响应。当我得到这个响应而不是测试失败时,我想知道是否可以跳过/忽略该测试,即使它已经开始运行。这将使我们的测试报告更加简洁。
有人有建议吗?
【问题讨论】:
标签: junit continuous-integration integration-testing
自从我使用 JUnit 已经有一段时间了,但没有办法Assume 条件为真吗?我认为这与测试的通过/失败具有不同的含义。您的报告应表明测试未运行。
编辑添加:Assume class
【讨论】:
在您的测试中,您可以在执行 Assert.whatever 之前测试这种情况。如果测试失败,只需从方法返回而不运行其余代码/断言。
【讨论】:
最简单的解决方案是将您的测试分成两个套件:集成测试和纯单元测试。然后开发一个脚本或其他一些自动化方法来确定服务器是否已启动,如果服务器已关闭,则只需跳过集成测试套件。但是,如果由于某种原因将测试分组到这样的套件中不切实际,这里有一个替代方案:
您可以创建一个自定义Runner,如果服务器不可用,它会跳过测试。您可以对运行程序进行编程以自行确定服务器可用性,也可以通过一些外部进程来确定它,例如在测试阶段之前执行的脚本并在运行程序可以检查的 JVM 上设置系统属性(例如,传递 -Dcom.company.testrun.integration=false 为命令行参数)。
您可以在集成测试类上使用 @RunWith 注释启用自定义运行程序,并将内置运行程序用于所有其他测试,以免受到影响。或者,您可以将您的运行器用于 all 测试并发明一个新的注释(例如@IntegrationTest)来装饰您的集成测试方法。使用后一种方法,只有当服务器不可用并且测试方法具有特殊注释时,运行程序才会应用其跳过逻辑。
【讨论】: