可以在JUnit4中命名测试套件吗?

可以在JUnit4中命名测试套件吗?,junit,junit4,Junit,Junit4,在JUnit3中,可以这样命名测试套件: public static Test suite() { TestSuite suite = new TestSuite("Some test collection"); suite.addTestSuite(TestX.class); return suite; } 在JUnit4中有没有一种等效的方法来实现这一点 谢谢 编辑 谢谢你,我真的成功了。我的问题是,是否有一种与JUnit4等效的方法来指定测试套件的名称/描述,如J

在JUnit3中,可以这样命名测试套件:

public static Test suite() {
    TestSuite suite = new TestSuite("Some test collection");
    suite.addTestSuite(TestX.class);
    return suite;
}
在JUnit4中有没有一种等效的方法来实现这一点

谢谢

编辑

谢谢你,我真的成功了。我的问题是,是否有一种与JUnit4等效的方法来指定测试套件的名称/描述,如JUnit3中的“sometestcollection”

一些背景:
我正在将遗留代码中的junit测试转换为版本4,如果可能的话,我不想丢失任何信息。很抱歉,我应该在最初的问题中更具体一些。

是的,在JUnit3.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之间的进一步比较以及

编辑:在blgt的评论之后,我发现我可能误解了你的意图。 您可能正在寻找
@RunWith(Suite.class)
-当用
@RunWith
注释一个类时,JUnit将调用其中注释的类来运行测试,而不是使用JUnit中内置的运行程序。用法的完整示例是tl;以下博士:

@RunWith(Suite.class)
@SuiteClasses({ FirstTest.class, SecondTest.class })
public class AllTests {
    ...
}

您可以使用
Suite
runner
@RunWith(Suite.class)

其中
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();
}
@RunWith(descripbeSuiteRunner.class)
@SuiteClass({Test1.class,Test2.class,TestX.class})
@SuiteDescription(“某些测试集合”)
公共类MySuite{}
公共类DescripteBuiteRunner扩展套件{
//转发至套房
公共描述插件(类klass、RunnerBuilder)
抛出初始化错误{
超级(克拉斯,建筑商);
}
@凌驾
受保护的字符串getName(){
返回getTestClass()
.getJavaClass()文件
.getAnnotation(SuiteDescription.class)
.value();
}
}
@保留(RetentionPolicy.RUNTIME)
@目标(ElementType.TYPE)
public@interface SuiteDescription{
字符串值();
}

getName
的默认实现只是返回被测试的类的名称

并不是为了这个目的吗?是的,我就是这么用的。我只是没有找到将测试套件名称设置为默认字符串的方法,就像在JUnit3中一样。我在回顾中编辑了这个问题,因为我确实过于含糊了。谢谢,尽管我的意思是试图找到一种方法来命名测试套件本身,如示例中所示。对不起,我已经编辑了上面的问题。
@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();
}