迁移:JUnit 3到JUnit 4:TestSuite

时间:2012-02-13 18:53:28

标签: regex junit junit4 junit3

我最近在使用JUnit 3,但我决定迁移到JUnit 4.现在我面临以下问题:

我在JUnit 3中使用了TestSuite,我运行了所有名称与“* TestMe.java”类似的java-Testclasses。

我有一百个测试,就像这样命名。

现在,使用JUnit 4,我必须明确地命名它们以在TestSuite中调用它们。

@RunWith(Suite.class)
@Suite.SuiteClasses(
{
    FirstTestMe.class,
    SecondTestMe.class,
    ThirdTestMe.class,

})
public class TestMe
{
    /**
     * Constructor.
     */
    private TestMe()
    {
        super();
    }
}

这真的很不舒服,我可能会忘记列出一些测试。另外,当我创建一个新的时,我必须在那里添加它。

有没有解决方法如何用正则表达式或其他东西调用那些测试类?

另外,还有一个问题:每个不是测试但可能在测试类中使用的方法必须用@Ignore注释? 我运行那些测试类没有任何错误,所以我想这没有必要吗?

4 个答案:

答案 0 :(得分:1)

您可能需要查看帖子migrate-tests-from-junit-3-to-junit-4,其中详细讨论了您想要的内容。

查看Dynamically create a Test Suite in JUnit 4Run all tests in Junit 4是否有帮助。

答案 1 :(得分:0)

在测试方法上方添加@Test注释。

public class TestMe
{
    @Before
    public void setUp() {

    }

    @Test
    public void myFirstTest() {
    }

}

答案 2 :(得分:0)

对于您的第一个问题,如果您想在JUnit 4中使用Test Suite,那么除了明确列出所有类之外没有任何选择。但是,如果要在包或项目中运行所有类,只需右键单击Eclipse中的包/项目并选择Run as JUnit test即可。如果您正在使用ant或maven surefire,则可以指定要使用* Test.java或类似方法运行的测试。

您不必使用@Ignore注释那些不是测试方法的方法。 JUnit 3和JUnit 4之间的(主要)区别是使用注释。所以它是JUnit3,你扩展TestCase并命名你所有的方法testXXX。在JUnit 4中,您不必扩展TestCase,但必须使用@Test注释所有测试方法。因此,任何未标记为@Test的方法都不会作为测试运行。当然,还有其他注释,例如@Before@After,它们会取代setUp()tearDown()

答案 3 :(得分:0)

有一个开源库ClasspathSuite。它允许您使用正则表达式来指定应该或不应该包含在测试套件中的类/包名称。

这是一个使用示例,其中包括两个包中的所有内容,但不包含在第三个包中。它还排除了另一个特定类别。

@ClassnameFilters( { "com.javaranch.*test.*", "net.jforum.*test.*", "!com.javaranch.test.web.*", "!.*All_JForum_Functional_Tests" })