1. 概述
本教程将讨论在JUnit 4中避免运行基类测试的方法。在这个教程中,基类只包含辅助方法,而子类将继承它并运行实际的测试。
2. 跳过基类测试
假设我们有一个名为BaseUnitTest
的基类,其中包含一些辅助方法:
public class BaseUnitTest {
public void helperMethod() {
// ...
}
}
现在,我们扩展它以包含一个包含测试的类:
public class ExtendedBaseUnitTest extends BaseUnitTest {
@Test
public void whenDoTest_thenAssert() {
// ...
}
}
如果我们运行测试,无论是通过IDE还是Maven构建,可能会收到错误消息,告诉我们BaseUnitTest
中没有可运行的测试方法。我们不希望在这个类中运行测试,所以我们正在寻找一种避免这种错误的方法。
我们将探讨三种不同的可能性。如果使用IDE运行测试,结果可能会根据我们使用的插件和如何配置它来运行JUnit测试而有所不同。
2.1. 重命名类
我们可以将类名更改为构建规范将排除其作为测试运行的名称。例如,如果我们使用Maven,可以查看Maven Surefire插件的默认设置。
我们可以将名称从BaseUnitTest
更改为BaseUnitTestHelper
或类似名称:
public class BaseUnitTestHelper {
public void helperMethod() {
// ...
}
}
2.2. 忽略
另一种选择是使用JUnit的@Ignore
注解暂时禁用测试。我们可以在类级别添加它以禁用类中的所有测试:
@Ignore("Class not ready for tests")
public class IgnoreClassUnitTest {
@Test
public void whenDoTest_thenAssert() {
// ...
}
}
同样,我们也可以在方法级别添加它,以防我们仍然需要在类内运行其他测试,但只想排除一两个:
public class IgnoreMethodTest {
@Ignore("This method not ready yet")
@Test
public void whenMethodIsIgnored_thenTestsDoNotRun() {
// ...
}
}
如果使用Maven运行,我们将看到如下输出:
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.041 s - in com.baeldung.IgnoreMethodTest
**自JUnit 5以来,@Disabled
注解取代了@Ignore
**。
2.3. 将基类设为抽象
可能最好的方法是使基测试类成为抽象的。抽象化需要一个具体的类来扩展它。因此,无论如何,JUnit都不会考虑它是一个测试实例。
让我们让BaseUnitTest
类成为抽象的:
public abstract class BaseUnitTest {
public void helperMethod() {
// ...
}
}
3. 总结
在这篇文章中,我们看到了在JUnit 4中排除基类测试的一些示例。最好的方法是创建抽象类。
JUnit的@Ignore
注解也很常用,但被认为是一种坏实践。通过忽略测试,我们可能会忘记它们及其被忽略的原因。
如往常一样,本文中展示的代码可在GitHub上找到。