是否可以在 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 中,您可以声明是否要对 运行 beforeafter 中的所有测试进行一些测试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 {}

其中 Test1Test2TestX 包含您的测试

参考。 RunWith, Suite

更新:

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 的名称