对 JUnit 测试进行分组
2022-08-31 21:18:56
有没有办法在JUnit中对测试进行分组,以便我只能运行一些组?
或者是否可以对某些测试进行批注,然后全局禁用它们?
我使用的是JUnit 4,我不能使用TestNG。
编辑:@RunWith和@SuiteClasses效果很好。但是,是否可以只在测试类中的一些测试中像这样注释呢?还是我必须对整个测试类进行注释?
有没有办法在JUnit中对测试进行分组,以便我只能运行一些组?
或者是否可以对某些测试进行批注,然后全局禁用它们?
我使用的是JUnit 4,我不能使用TestNG。
编辑:@RunWith和@SuiteClasses效果很好。但是,是否可以只在测试类中的一些测试中像这样注释呢?还是我必须对整个测试类进行注释?
JUnit 4.8 支持分组:
public interface SlowTests {}
public interface IntegrationTests extends SlowTests {}
public interface PerformanceTests extends SlowTests {}
然后。。。
public class AccountTest {
@Test
@Category(IntegrationTests.class)
public void thisTestWillTakeSomeTime() {
...
}
@Test
@Category(IntegrationTests.class)
public void thisTestWillTakeEvenLonger() {
...
}
@Test
public void thisOneIsRealFast() {
...
}
}
最后,
@RunWith(Categories.class)
@ExcludeCategory(SlowTests.class)
@SuiteClasses( { AccountTest.class, ClientTest.class })
public class UnitTestSuite {}
从这里获取: https://community.oracle.com/blogs/johnsmart/2010/04/25/grouping-tests-using-junit-categories-0
此外,Arquillian本身支持分组:https://github.com/weld/core/blob/master/tests-arquillian/src/test/java/org/jboss/weld/tests/Categories.java
是要对测试类内的测试进行分组,还是要对测试类进行分组?我将假设后者。
这取决于您运行测试的方式。如果通过 Maven 运行它们,则可以准确指定要包含的测试。请参阅 Maven surefire 文档。
不过,更一般地说,我所做的是我有一棵测试套件树。JUnit 4 中的测试套件如下所示:
@RunWith(Suite.class)
@SuiteClasses({SomeUnitTest1.class, SomeUnitTest2.class})
public class UnitTestsSuite {
}
所以,也许我有一个FunctionTestsSuite和一个UnitTestsSuite,然后是一个AllTestsSuite,其中包括另外两个。如果你在Eclipse中运行它们,你会得到一个非常好的分层视图。
这种方法的问题在于,如果你想以多种不同的方式对测试进行切片,这有点乏味。但这仍然是可能的(例如,您可以拥有一组基于模块切片的套件,然后在测试类型上进行另一组切片)。