是否可以在JUnit 4中命名测试套件?

时间:2016-01-12 13:32:03

标签: junit junit4

在JUnit3中,人们可以这样命名一个测试套件:

public static Test suite() {
    TestSuite suite = new TestSuite("Some test collection");
    suite.addTestSuite(TestX.class);
    return suite;
}

在JUnit4中有相同的方法吗?

感谢。

修改

谢谢,我确实设法让它运转起来。我的问题是,是否有一个JUnit4等效方式来指定测试套件的名称/描述,就像在JUnit3中使用"一些测试集合"。

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

2 个答案:

答案 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 herehere之间的进一步比较。

编辑:在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 {}

Test1Test2TestX包含您的测试

REF。 RunWithSuite

更新

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的默认实现只返回被测试类的名称