`
JerryWang_SAP
  • 浏览: 1043887 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

JUnit 注解@Category的工作原理

阅读更多

Suppose you have a large number of unit test cases and you don’t want them to be executed all at the same time during Maven build. You can simply achieve it via annotation @Category.

(1) Create empty class FastTests and SlowTests. (2) In your test case class, categorize your test method using @Category annotation:

 

 

(3) Append the following code to your pom.xml:

<profiles>
        <profile>
            <id>SlowTests</id>
            <properties>
                <testcase.groups>com.sap.SlowTests</testcase.groups>
            </properties>
        </profile>
        <profile>
            <id>FastTests</id>
            <properties>
                <testcase.groups>com.sap.FastTests</testcase.groups>
            </properties>
        </profile>
    </profiles>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.13</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.maven.surefire</groupId>
                        <artifactId>surefire-junit47</artifactId>
                        <version>2.13</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <groups>${testcase.groups}</groups>
                </configuration>
            </plugin>
        </plugins>
    </build>

(4)In my project, by default all 7 test methods will be executed during Maven build:

 

 

Suppose you only want to execute unit test belonging to category “SlowTests”, use the following command line:

 

 

Since now I only marked one method with annotation SlowTests, only one test method is executed:

 

 

If you would like to execute all unit tests EXCEPT @SlowTests, simply add another profile in pom.xml:

<profile>
            <id>NonSlowTests</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <excludedGroups>com.sap.SlowTests</excludedGroups>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

Before test, in order to prove that Slow method is NOT really executed, I add a system.out.println in each method:

 

 

Use command line: mvn test -P NonSlowTests From console output, I can ensure that the method with @Category(SlowTests.class) is NOT executed at all.

 

 

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

0
1
分享到:
评论

相关推荐

    JUnitCategories:与 JUnit 4 @Category 注释一起使用的(小)类别集合

    JUnit 类别 JUnit 4.9 引入了一个很好的注释来对您的测试进行分类。 而 TestNG 选择为使用字符串 JUnit 类别使用类。 这比字符串更灵活,这在使用多模块 maven 项目时可能会很痛苦(有关更多详细信息,请参阅 JUnit ...

    最新junit4,完整压缩文件,支持注解

    7. `@Category`: 通过定义自定义注解并配合此注解,你可以将测试分类,方便按类别运行测试。 8. `@ExpectedException`: 可以用来断言方法是否抛出了预期的异常,替代了在@Test中使用`expected`属性的方式。 除了...

    junit3.8 和junit4 api

    在JUnit 3中,初始化和清理工作是通过`setUp()`和`tearDown()`方法实现的,它们会在每个测试方法之前和之后自动调用。 4. **测试套件(Test Suites)**:通过`@Suite`注解创建,但这是JUnit 4的特性。在JUnit 3中,...

    Junit4.4 Junit3.8.1

    4. **分类测试**:`@Category`注解允许创建测试类别,更精细地组织和运行测试。 5. **规则**:`TestRule`接口允许自定义测试执行行为,如超时、日志记录等。 6. **运行器**:JUnit 4支持自定义运行器,如`BlockJUnit...

    注解的在junit总的使用模拟.rar

    通过学习和应用这些JUnit注解,开发者不仅可以提高测试的效率,还能确保代码的质量和可维护性。记住,良好的测试习惯是软件工程中不可或缺的一部分,尤其是在大型项目中,单元测试能够帮助我们早发现、早修复问题,...

    Junit测试学习文档

    2. 测试分类:@Category注解可以将测试分为不同的类别,方便按需执行。 3. 参数化测试:@Parameterized可以实现基于参数集的测试,提高测试覆盖率。 4. 注册与监听:@Rule注解可以注册测试规则,如临时文件系统、...

    junit-4.10.jar,junit集合

    9. **分类测试**:`@Category`注解允许为测试分类,便于筛选和运行特定类型的测试。 `junit-4.10.txt`可能是JUnit 4.10的文档或者版本信息,通常包含关于库的详细说明、API参考和使用指南。 在使用`junit-4.10.jar...

    Junit4.4&3.8.1.rar

    本资源包含了JUnit的两个主要版本——4.4和3.8.1的源码和帮助文档,这对于学习和理解JUnit的工作原理以及历史演变非常有帮助。 JUnit 3.8.1是较早的一个版本,其核心特性包括: 1. **注解(Annotations)**:虽然...

    junit.rar包

    5. **测试注解**:除了`@Test`,JUnit还提供了其他注解,如`@Before`和`@After`,它们分别表示在每个测试方法之前和之后执行的代码,常用于初始化和清理工作。`@BeforeClass`和`@AfterClass`则是在整个测试类执行...

    junit测试.zip

    6. **分类(Categories)**:`@Category`注解可以将测试分为不同的类别,方便按需运行特定类型的测试。 7. **测试运行器(Test Runners)**:JUnit支持多种运行器,如文本UI运行器、JUnit vintage(兼容旧版JUnit)...

    Junit sourcecode

    本课程资源旨在帮助你深入理解JUnit的工作原理,提升你的测试编写技巧,以及对测试驱动开发(TDD)有更深入的理解。 1. JUnit简介: JUnit是一个开源的、基于Java的单元测试框架,它使得编写和运行测试用例变得简单...

    Junit4教程.pdf

    这两个注解分别表示在每个测试方法执行前后的准备工作和清理工作。与JUnit3不同的是,JUnit4不再强制这些方法的名称。 5. **异常预期测试**: - `@Test(expected=*.class)`这个注解允许开发者指定预期的异常类型。...

    各种版本的JUnit

    JUnit 4.8进一步增强了注解的使用,比如添加了`@Category`注解,用于分类测试,便于组织和筛选测试用例。这一版本还加强了异常处理,提供了`expected`参数,允许指定测试方法预期抛出的异常类型。 JUnit 4.10引入了...

    junit-4.12

    源代码的提供对于开发者来说有着极高的价值,因为它允许开发者深入理解JUnit的工作原理,查看内部实现,甚至调试或扩展JUnit本身。这对于学习和研究测试框架的设计思想,或者在遇到问题时排查错误,都是极其宝贵的...

    Junit4的应用案例

    在Junit4中,测试类通常继承自junit.framework.TestCase类,但更推荐使用@RunWith注解配合一个测试运行器,如@RunWith(JUnit4.class),这样可以避免TestCase类的遗留API。测试方法需用@Test注解标识,如: ```java ...

    junit4.8.2

    使用`@Category`注解,开发者可以将测试划分为不同的类别,便于按需执行特定类型的测试。 9. **Rule和TestWatcher** JUnit 4.8.2引入了`@Rule`,它允许创建自定义的测试规则,如资源管理、日志记录等。`...

    junit4单元测试

    例如,`@Test`注解用于标记测试方法,而`@Before`和`@After`则分别用于在每个测试之前和之后执行的设置和清理工作。这些注解替代了JUnit3中的Setup和Teardown方法,使代码更易读。 在JUnit4中,你可以使用断言...

    junit4.1.zip

    `@Category`注解则允许对测试进行分类,便于组织和筛选测试。 7. **测试监听器** JUnit 4.1引入了测试监听器的概念,通过实现`TestListener`接口或使用`@Rule`注解,可以定制测试的执行过程,如记录测试日志、捕获...

    Junit-jar包

    这个"Junit-jar包"显然包含了JUnit库的jar文件,使得开发者能够在自己的项目中引入JUnit,进行高效的测试工作。 JUnit是一个开源项目,由Ernst Konrad Keil和Kent Beck共同创建,它遵循MIT许可证,因此可以自由地在...

Global site tag (gtag.js) - Google Analytics