是否可以在 JUnit 4 中命名测试套件?
Is it possible to name a test suite in JUnit 4?
在 JUnit3 中,可以这样命名测试套件:
public static Test suite() {
TestSuite suite = new TestSuite("Some test collection");
suite.addTestSuite(TestX.class);
return suite;
}
在 JUnit4 中是否有等效的方法来执行此操作?
谢谢。
编辑
谢谢,我真的成功了。我的问题是是否有 JUnit4 等效的方法来指定测试套件的 name/description,就像在 JUnit3 中使用 "Some test collection" 一样。
一些背景:
我正在将遗留代码中的 junit 测试转换为版本 4,如果可能的话,我不想丢失任何信息。抱歉,我真的应该在原来的问题中更具体。
是的,在 JUnit 3.x 中,必须专门命名 JUnit 方法。他们需要以单词 test 开头,以便 JUnit 运行 将其作为测试用例。现在你可以只使用 @Test
注释:
@Test
public void thisIsMyTest() {
// test goes here
}
此外,在 JUnit4 中,您可以声明是否要对 运行 before 或 after 中的所有测试进行一些测试class 被调用:
@Before
public void init() throws Exception {
System.out.println("Initializing...");
}
@After
public void finish() throws Exception {
System.out.println("Finishing...");
}
进一步比较 JUnit3 和 JUnit4 here and here。
编辑:在 blgt 的评论之后,我发现我可能误解了您的意图。
您 是 可能正在寻找 @RunWith(Suite.class)
- 当 class 被注释为 @RunWith
时,JUnit 将调用被注释的 class以便 运行 测试,而不是使用 JUnit 内置的 运行ner。完整的用法示例是 here,tl; dr 下面:
@RunWith(Suite.class)
@SuiteClasses({ FirstTest.class, SecondTest.class })
public class AllTests {
...
}
您可以使用 Suite
跑步者 @RunWith(Suite.class)
:
@RunWith(Suite.class)
@SuiteClasses({Test1.class, Test2.class, TestX.class})
public class MySuite {}
其中 Test1
、Test2
、TestX
包含您的测试
更新:
WRT 更改套件的实际描述,我认为没有办法做到这一点 out-of-the-box(如果有的话,我还没有看到)。您可以做的是使用自定义描述定义您自己的跑步者 [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
的默认实现只是 returns 正在测试的 class 的名称
在 JUnit3 中,可以这样命名测试套件:
public static Test suite() {
TestSuite suite = new TestSuite("Some test collection");
suite.addTestSuite(TestX.class);
return suite;
}
在 JUnit4 中是否有等效的方法来执行此操作?
谢谢。
编辑
谢谢,我真的成功了。我的问题是是否有 JUnit4 等效的方法来指定测试套件的 name/description,就像在 JUnit3 中使用 "Some test collection" 一样。
一些背景: 我正在将遗留代码中的 junit 测试转换为版本 4,如果可能的话,我不想丢失任何信息。抱歉,我真的应该在原来的问题中更具体。
是的,在 JUnit 3.x 中,必须专门命名 JUnit 方法。他们需要以单词 test 开头,以便 JUnit 运行 将其作为测试用例。现在你可以只使用 @Test
注释:
@Test
public void thisIsMyTest() {
// test goes here
}
此外,在 JUnit4 中,您可以声明是否要对 运行 before 或 after 中的所有测试进行一些测试class 被调用:
@Before
public void init() throws Exception {
System.out.println("Initializing...");
}
@After
public void finish() throws Exception {
System.out.println("Finishing...");
}
进一步比较 JUnit3 和 JUnit4 here and here。
编辑:在 blgt 的评论之后,我发现我可能误解了您的意图。
您 是 可能正在寻找 @RunWith(Suite.class)
- 当 class 被注释为 @RunWith
时,JUnit 将调用被注释的 class以便 运行 测试,而不是使用 JUnit 内置的 运行ner。完整的用法示例是 here,tl; dr 下面:
@RunWith(Suite.class)
@SuiteClasses({ FirstTest.class, SecondTest.class })
public class AllTests {
...
}
您可以使用 Suite
跑步者 @RunWith(Suite.class)
:
@RunWith(Suite.class)
@SuiteClasses({Test1.class, Test2.class, TestX.class})
public class MySuite {}
其中 Test1
、Test2
、TestX
包含您的测试
更新:
WRT 更改套件的实际描述,我认为没有办法做到这一点 out-of-the-box(如果有的话,我还没有看到)。您可以做的是使用自定义描述定义您自己的跑步者 [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
的默认实现只是 returns 正在测试的 class 的名称