JUnit 4如何忽略基测试类

2023/05/09

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运行测试,我们可能会得到不同的结果,具体取决于我们的IDE插件以及我们如何配置它来运行JUnit测试。

2.1 重命名类

我们可以将类重命名为构建约定将从作为测试运行中排除的名称。例如,如果我们使用Maven,我们可以检查Maven Surefire插件的默认值。

我们可以将名称从BaseUnitTest更改为BaseUnitTestHelper或类似名称

public class BaseUnitTestHelper {
    public void helperMethod() {
        // ...
    }
}

2.2 @Ignore

第二种选择是使用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上找到。

Show Disqus Comments

Post Directory

扫码关注公众号:Taketoday
发送 290992
即可立即永久解锁本站全部文章