4

我最近在使用 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

4 回答 4

1

您可能想查看migrate-tests-from-junit-3-to-junit-4 这篇文章,它准确地讨论了您想要的内容。

查看在 JUnit 4 中动态创建测试套件在 Junit 4 中运行所有测试是否有帮助。

于 2012-02-13T19:18:24.147 回答
0

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

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

    }

    @Test
    public void myFirstTest() {
    }

}
于 2012-02-13T18:57:59.427 回答
0

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

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

于 2012-02-14T06:41:05.477 回答
0

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

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

@ClassnameFilters( { "com.javaranch.*test.*", "net.jforum.*test.*", "!com.javaranch.test.web.*", "!.*All_JForum_Functional_Tests" })
于 2012-02-25T01:43:32.100 回答