首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JUnit 4中可以命名测试套件吗?

在JUnit 4中可以命名测试套件吗?
EN

Stack Overflow用户
提问于 2016-01-12 13:32:03
回答 2查看 1.8K关注 0票数 1

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

代码语言:javascript
复制
public static Test suite() {
    TestSuite suite = new TestSuite("Some test collection");
    suite.addTestSuite(TestX.class);
    return suite;
}

在JUnit4中有类似的方法吗?

谢谢。

编辑

谢谢,我真的成功了。我的问题是,是否有一种JUnit4等效的方法来指定测试套件的名称/描述,比如在JUnit3中使用“一些测试集合”。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-12 13:52:40

您可以使用Suite runner @RunWith(Suite.class)来完成这一任务。

代码语言:javascript
复制
@RunWith(Suite.class)
@SuiteClasses({Test1.class, Test2.class, TestX.class})
public class MySuite {}

其中Test1Test2TestX包含您的测试

参考RunWith套间

最新情况:

WRT改变了您的套房的实际描述,我不认为有什么方法可以做到这一点(如果我还没有看到)。您可以做的是使用自定义描述update2定义自己的运行程序。

代码语言:javascript
复制
@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的默认实现只返回被测试类的名称

票数 2
EN

Stack Overflow用户

发布于 2016-01-12 13:39:32

是的,在JUnit 3.x中,必须专门命名JUnit方法。他们需要从单词test开始,这样JUnit才能将其作为测试用例运行。现在只需使用@Test注释:

代码语言:javascript
复制
@Test
public void thisIsMyTest() {
    // test goes here
}

同样,在JUnit4中,如果希望在调用该类中的所有测试之前或之后运行某些测试,则可以声明:

代码语言:javascript
复制
@Before
public void init() throws Exception {
    System.out.println("Initializing...");
}

@After
public void finish() throws Exception {
    System.out.println("Finishing...");
}

JUnit3与JUnit4 这里这里的进一步比较。

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

代码语言:javascript
复制
@RunWith(Suite.class)
@SuiteClasses({ FirstTest.class, SecondTest.class })
public class AllTests {
    ...
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34745080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档