加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何对大量JUnit测试进行分组/分类

发布时间:2020-12-15 02:51:37 所属栏目:Java 来源:网络整理
导读:在我们的项目中,我们目前有大量(junit)测试,分为三类:单元,集成,检票口. 我现在想要对这些测试进行分组,以便我只能运行其中一个(或两个)类别.我发现的唯一的东西是junit测试套件和类别,如下所述:http://www.wakaleo.com/component/content/article/267 我
在我们的项目中,我们目前有大量(junit)测试,分为三类:单元,集成,检票口.

我现在想要对这些测试进行分组,以便我只能运行其中一个(或两个)类别.我发现的唯一的东西是junit测试套件和类别,如下所述:http://www.wakaleo.com/component/content/article/267

我的问题是,我不想用@SuiteClasses在Test Suits中声明每一个测试.

有没有办法添加带有通配符/模式的套件类?

解决方法

假设我对这个问题的理解是正确的,实际上可以使用JUnit来完成.下面的代码与JUnit 4.11一起使用,并允许我们将所有测试分为两类:“未分类”和集成.

IntegrationTestSuite.java

/**
 * A custom JUnit runner that executes all tests from the classpath that
 * match the <code>ca.vtesc.portfolio.*Test</code> pattern 
 * and marked with <code>@Category(IntegrationTestCategory.class)</code>
 * annotation. 
 */
@RunWith(Categories.class)
@IncludeCategory(IntegrationTestCategory.class)
@Suite.SuiteClasses( { IntegrationTests.class })
public class IntegrationTestSuite {
}

@RunWith(ClasspathSuite.class)
@ClasspathSuite.ClassnameFilters({ "ca.vtesc.portfolio.*Test" })
class IntegrationTests {
}

UnitTestSuite.java

/**
  * A custom JUnit runner that executes all tests from the classpath that match
  * <code>ca.vtesc.portfolio.*Test</code> pattern.
  * <p>
  * Classes and methods that are annotated with the
  * <code>@Category(IntegrationTestCategory.class)</code> category are 
  * <strong>excluded</strong>.
  */

@RunWith(Categories.class)
@ExcludeCategory(IntegrationTestCategory.class)
@Suite.SuiteClasses( { UnitTests.class })
public class UnitTestSuite {
}

@RunWith(ClasspathSuite.class)
@ClasspathSuite.ClassnameFilters({ "ca.vtesc.portfolio.*Test" })
class UnitTests {
}

IntegrationTestCategory.java

/**
 * A marker interface for running integration tests.
 */
public interface IntegrationTestCategory {
}

下面的第一个示例测试未使用任何类别进行注释,因此在运行UnitTestSuite时将包括其所有测试方法,并在运行IntegrationTestSuite时将其排除.

public class OptionsServiceImplTest {
    @Test
    public void testOptionAssignment() {
        // actual test code
    }
}

下一个示例在类级别上标记为Integration测试,这意味着在运行UnitTestSuite并将其包含在IntegrationTestSuite中时,将排除其测试方法:

@Category(IntegrationTestCategory.class)
public class PortfolioServiceImplTest {
    @Test
    public void testTransfer() {
        // actual test code
    }
    @Test
    public void testQuote() {
    }
}

第三个示例演示了一个测试类,其中一个方法没有注释,另一个标记为Integration类.

public class MarginServiceImplTest {
    @Test
    public void testPayment() {
    }
    @Test
    @Category(IntegrationTestCategory.class)
    public void testCall() {
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读