【发布时间】:2013-01-29 11:38:21
【问题描述】:
我们有很多用 Junit 3.x 编写的旧单元测试。我的任务是将它们移植到我们的 JUnit 4.x 编码标准,其中包括禁止使用“扩展 TestCase”。
一些旧测试调用了 super.setUp(),我现在需要删除它,但是,我不确定该调用中发生了什么。我可以直接删除这行代码而不用担心,还是应该用其他东西替换它?
【问题讨论】:
我们有很多用 Junit 3.x 编写的旧单元测试。我的任务是将它们移植到我们的 JUnit 4.x 编码标准,其中包括禁止使用“扩展 TestCase”。
一些旧测试调用了 super.setUp(),我现在需要删除它,但是,我不确定该调用中发生了什么。我可以直接删除这行代码而不用担心,还是应该用其他东西替换它?
【问题讨论】:
由于现在在每次测试之前都会调用 setUp(),因此您可以安全地删除 super.setUp()。
【讨论】:
junit.framework.TestCase 的基类,并且该基类有一个非抽象的setUp() 调用,那么对super.setUp() 的调用是绝对必要的。如果您在移植到 JUnit4 后有基类(并且很少需要使用规则),则使 @Before 和 @After 方法具有良好的名称并使其成为最终方法。
注释掉该行,然后运行测试。如果测试写得正确,那么测试结果应该会在假设测试之前成功的情况下为您提供答案。
【讨论】:
super.setUp() 是 TestCase 不做任何事情,可以安全地删除。如果您要扩展另一个类,您仍然需要保留 super.setUp() 调用。但是,它不会编译失败,所以你应该没问题。
例如,假设我们有 ATest 扩展 BTest 和 BTest 扩展 TestCase。您可以安全地从 BTest 而不是 ATest 中删除 super.setUp() 调用。由于 BTest 可能会做某事,因此 ATest 仍然需要调用它。
【讨论】: