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

JUnit 注解@RunWith的工作原理

阅读更多

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
分享到:
评论

相关推荐

    Junit单元测试内部机制解析

    - **加载测试类**:JUnit首先识别出标记为`@RunWith`注解的测试类,如果没有使用特定的运行器,那么默认使用JUnit的运行器。 - **实例化测试类**:对于每一个测试方法,JUnit都会创建一个新的测试类实例。 - **执行...

    junit4.7完整jar包

    通过使用@RunWith(Parameterized.class)注解和一些辅助方法,可以创建参数化的测试,这对于验证函数的边界条件或者多种输入情况特别有效。 此外,Junit4.7也引入了注解驱动的异常测试,通过@Expected注解,你可以...

    junit4测试源码

    还有`@Ignore`注解可以临时忽略某个测试,`@RunWith`用于指定运行器,如`@RunWith(Suite.class)`来组合多个测试。 其次,JUnit4支持参数化测试,这意味着一个测试方法可以使用不同的参数多次执行。`@Parameters`...

    junit-4.4包+源码

    此外,还有`@Ignore`注解用于忽略某个测试,`@RunWith`用于指定运行器,比如`@RunWith(Parameterized.class)`可以实现参数化测试。 2. **断言改进**:JUnit 4.4提供了更多的断言方法,如`assertEquals`、`...

    junit源码解析之runner

    首先,Runner的启动通常是由`@RunWith`注解触发的。开发者可以自定义Runner类,通过`@RunWith`指定,这样JUnit在运行测试时会使用这个自定义的Runner。例如: ```java @RunWith(MyCustomRunner.class) public class...

    junit4 jar包以及源码

    `junit-4.11-sources.jar` 则包含了JUnit 4.11源代码,这对于学习和理解JUnit的工作原理非常有帮助。通过查看源码,开发者可以深入探究JUnit的内部实现,如测试监听器、测试装饰器、异常处理机制等。这有助于在遇到...

    Spring是如何整合JUnit的?JUnit源码关联延伸阅读.doc

    当我们使用 `@RunWith(SpringRunner.class)` 注解时,SpringRunner 会接管测试的执行流程,使得在 JUnit 的基础上,能够利用 Spring 的依赖注入、AOP 等特性。 在 SpringRunner 中,Spring 会通过 `@...

    junit4.8.2.zip

    7. **测试套件(Test Suites)**:可以使用`@RunWith(Suite.class)`注解来组织多个测试类成一个测试套件,方便批量运行和管理测试。 8. **规则(Rules)**:JUnit4.8.2引入了规则的概念,比如`TemporaryFolder`规则...

    JUnit深入浅出

    例如,@Ignore注解可以暂时跳过某个测试,@RunWith注解允许我们自定义测试运行器以扩展测试行为。参数化测试(@Parameterized)使得一个测试方法能用多种输入数据运行,提高了测试覆盖率。还有模拟对象(Mock ...

    Junit4.8.1.rar

    在实际开发中,我们可以使用`@Ignore`注解来跳过某个测试,`@RunWith`注解来指定测试运行器,比如`Suite`类,它可以将多个测试类组合在一起作为一个测试套件来运行。 对于那些需要更细粒度控制测试执行流程的场景,...

    Junit4.8.2(Junit4.7)

    1. **测试方法的编写**:通过`@Test`注解标记测试方法,测试类通常继承自`org.junit.runner.RunWith`,例如`RunWith(JUnit4.class)`,表明该类使用JUnit 4运行器。 2. **异常断言**:使用`assertThrows()`方法检查...

    junit实例demo

    在这个“junit实例demo”中,我们将会深入理解JUnit的工作原理及其核心特性。 1. **JUnit简介** JUnit是开源的、基于Java的测试框架,它遵循XUnit测试框架的设计模式。它简化了对Java代码进行单元测试的过程,通过...

    JUnit -- 分析

    这篇分析可能是从源码层面或实际应用角度来解析JUnit的工作原理和使用技巧。 描述中虽然没有具体信息,但根据博文链接(https://orange5458.iteye.com/blog/1305042)我们可以推测,该博客可能涵盖了以下JUnit相关...

    Junit sourcecode

    通过使用@RunWith(Parameterized.class)和@Parameters注解,我们可以创建参数化的测试类。 5. 测试套件与分类: JUnit支持测试套件(Test Suite),可以将多个测试类组合在一起,一次性运行。同时,通过@Test...

    JUnit测试源码

    JUnit测试源码对于理解测试框架的工作原理、学习如何编写有效的测试以及定制JUnit行为都非常重要。在这个名为"011_JUnit4"的压缩包中,我们很可能是得到了JUnit 4版本的源代码。 JUnit 4是一个基于注解的测试框架,...

    学习JUnit4过程中的总结

    `@RunWith`注解允许我们使用自定义的测试运行器(Runner),比如`Parameterized`测试运行器,可以进行参数化测试,同一个测试方法可以针对不同的输入数据执行多次。 在错误处理方面,JUnit4提供`@Expected`注解,...

    JUnit3.8(三)

    1. 创建测试类:继承自JUnit的`TestCase`类,或者使用`@RunWith`注解指定运行器,如`RunWith(JUnit4.class)`。 2. 编写测试方法:在方法前添加@Test注解,方法内部编写测试逻辑。 3. 运行测试:通过IDE的测试运行...

    junit单元测试使用方法(实例)

    在 JUnit 中,可以通过 `TestSuite` 类或使用 `@RunWith` 和 `@Suite` 注解来定义测试套件。 #### 三、JUnit单元测试的使用方法 1. **安装JUnit** 安装 JUnit 相对简单,只需将 JUnit 的 `.jar` 文件添加到项目...

    junit-4.12.jar

    5. **扩展性**:JUnit 4.12允许开发者创建自己的测试装饰器(Test Decorators),通过`@RunWith`注解来指定运行器,这增强了框架的可扩展性。 6. **假设(Assumptions)**:`Assume`类提供了假设方法,允许在测试...

    junit-4.12

    JUnit 4.12支持断言(Assertions)进行结果验证,如`assertEquals()`、`assertTrue()`等,还提供了各种测试注解,如`@Ignore`用于忽略特定测试,`@Category`用于分类测试,`@RunWith`指定运行器等。此外,它还集成了...

Global site tag (gtag.js) - Google Analytics