在JUnit3中,人们可以这样命名一个测试套件:
public static Test suite() {
TestSuite suite = new TestSuite("Some test collection");
suite.addTestSuite(TestX.class);
return suite;
}
在JUnit4中有相同的方法吗?
感谢。
修改
谢谢,我确实设法让它运转起来。我的问题是,是否有一个JUnit4等效方式来指定测试套件的名称/描述,就像在JUnit3中使用"一些测试集合"。
一些背景: 我将遗留代码中的junit测试转换为版本4,如果可能的话,我不想丢失任何信息。我道歉,我应该在最初的问题中更加具体。
答案 0 :(得分:1)
是的,在JUnit 3.x中,必须特别命名JUnit方法。他们需要从 test 一词开始,以便JUnit将其作为测试用例运行。现在您可以使用@Test
注释:
@Test
public void thisIsMyTest() {
// test goes here
}
同样在JUnit4中,您可以说明是否希望某些测试在之前运行,之后 在此类中调用所有测试:
@Before
public void init() throws Exception {
System.out.println("Initializing...");
}
@After
public void finish() throws Exception {
System.out.println("Finishing...");
}
JUnit3与JUnit4 here和here之间的进一步比较。
编辑:在blgt的评论之后,我发现我可能误解了你的意图。
您 可能正在寻找@RunWith(Suite.class)
- 当一个类使用@RunWith
注释时,JUnit将调用注释的类以便运行测试,而不是使用跑步者内置于JUnit中。完整的使用示例是here,tl; dr under:
@RunWith(Suite.class)
@SuiteClasses({ FirstTest.class, SecondTest.class })
public class AllTests {
...
}
答案 1 :(得分:1)
您可以使用Suite
亚军@RunWith(Suite.class)
:
@RunWith(Suite.class)
@SuiteClasses({Test1.class, Test2.class, TestX.class})
public class MySuite {}
Test1
,Test2
,TestX
包含您的测试
更新
WRT更改套件的实际描述,我认为没有办法开箱即用(如果我还没有看到它)。你可以做的是用自定义描述[update2]定义你自己的跑步者:
@RunWith(DescribedSuiteRunner.class)
@SuiteClasses({Test1.class, Test2.class, TestX.class})
@SuiteDescription("Some test collection")
public class MySuite {}
public class DescribedSuiteRunner extends Suite {
// forward to Suite
public DescribedSuiteRunner(Class<?> klass, RunnerBuilder builder)
throws InitializationError {
super(klass, builder);
}
@Override
protected String getName() {
return getTestClass()
.getJavaClass()
.getAnnotation(SuiteDescription.class)
.value();
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface SuiteDescription {
String value();
}
getName
的默认实现只返回被测试类的名称