`

junit中的@classrule,@rule

 
阅读更多
junit中的@classrule,可以在所有类方法开始前进行一些初始化调用,比如创建临时文件,
package com.jdriven;

import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;

import java.io.File;
import java.io.IOException;

public class JUnitClassRuleTest {

   
    @ClassRule
    public static TemporaryFolder temporaryFolder = new TemporaryFolder();

    public static File tempFile;

    @BeforeClass
    public static void createTempFile() throws IOException {
        tempFile = temporaryFolder.newFile("tempFile.txt");
    }

    @Test
    public void testJUnitClassRule_One() {
        //Your test should go here, which uses tempFile
    }

    @Test
    public void testJUnitClassRule_Two() {
        //Your test should go here and uses the same tempFile
    }
}



  其中,@ClassRule中指定创建临时文件夹,这是在所有的测试方法前会创建文件夹,并且会在所有测试完成后,递归删除其下的子目录和子文件夹。
   @Rule是方法级别的,每个测试方法执行时都会调用被注解的Rule,而@ClassRule是类级别的,在执行一个测试类的时候只会调用一次被注解的Rule

------------------------------------------------------------
再看下其他内置的rule
   ExternalResource Rule
ExternalResource 是TemporaryFolder的父类,主要用于在测试之前创建资源,并在测试完成后销毁。
Java代码  收藏代码
File tempFile; 
 
@Rule 
public ExternalResource extResource = new ExternalResource() { 
    //每个测试执行之前都会调用该方法创建一个临时文件 
    @Override 
    protected void before() throws Throwable { 
        tempFile = File.createTempFile("test", ".txt"); 
    } 
 
    //每个测试执行之后都会调用该方法删除临时文件 
    @Override 
    protected void after() { 
        tempFile.delete(); 
    } 
}; 
 
@Test 
public void testExtResource() throws IOException { 
    System.out.println(tempFile.getCanonicalPath()); 


ErrorCollector Rule
ErrorCollector允许我们收集多个错误,并在测试执行完后一次过显示出来
Java代码  收藏代码
@Rule 
public ErrorCollector errorCollector = new ErrorCollector(); 
 
@Test 
public void testErrorCollector() { 
    errorCollector.addError(new Exception("Test Fail 1")); 
    errorCollector.addError(new Throwable("fff")); 


Verifier Rule
Verifier是ErrorCollector的父类,可以在测试执行完成之后做一些校验,以验证测试结果是不是正确
Java代码  收藏代码
String result; 
 
@Rule 
public Verifier verifier = new Verifier() { 
    //当测试执行完之后会调用verify方法验证结果,抛出异常表明测试失败 
    @Override 
    protected void verify() throws Throwable { 
        if (!"Success".equals(result)) { 
            throw new Exception("Test Fail."); 
        } 
    } 
}; 
 
@Test 
public void testVerifier() { 
    result = "Fail"; 


TestWatcher Rule
TestWatcher 定义了五个触发点,分别是测试成功,测试失败,测试开始,测试完成,测试跳过,能让我们在每个触发点执行自定义的逻辑。
Java代码  收藏代码
@Rule 
public TestWatcher testWatcher = new TestWatcher() { 
    @Override 
    protected void succeeded(Description description) { 
        System.out.println(description.getDisplayName() + " Succeed"); 
    } 
 
    @Override 
    protected void failed(Throwable e, Description description) { 
        System.out.println(description.getDisplayName() + " Fail"); 
    } 
 
    @Override 
    protected void skipped(AssumptionViolatedException e, Description description) { 
        System.out.println(description.getDisplayName() + " Skipped"); 
    } 
 
    @Override 
    protected void starting(Description description) { 
        System.out.println(description.getDisplayName() + " Started"); 
    } 
 
    @Override 
    protected void finished(Description description) { 
        System.out.println(description.getDisplayName() + " finished"); 
    } 
}; 
 
@Test 
public void testTestWatcher() { 
    /*
        测试执行后会有以下输出:
        testTestWatcher(org.haibin369.test.RulesTest) Started
        Test invoked
        testTestWatcher(org.haibin369.test.RulesTest) Succeed
        testTestWatcher(org.haibin369.test.RulesTest) finished
     */ 
    System.out.println("Test invoked"); 


TestName Rule
TestName能让我们在测试中获取目前测试方法的名字。
Java代码  收藏代码
@Rule 
public TestName testName = new TestName(); 
 
@Test 
public void testTestName() { 
    //打印出测试方法的名字testTestName 
    System.out.println(testName.getMethodName()); 

分享到:
评论

相关推荐

    在JUnit中使用@Rule测试文件和目录Java开发Ja

    在本文中,我们将深入探讨如何在JUnit中利用`@Rule`注解来测试文件和目录,从而提升测试的覆盖率和实用性。 `@Rule`是JUnit框架中的一个重要概念,它允许我们定义自定义的测试规则。这些规则会在测试方法执行前后被...

    探索JUnit4扩展:深入Rule

    此外,JUnit4的Rule与`@ClassRule`配合使用,可以应用于整个测试类,而不仅仅是单个测试方法。这对于设置和清理共享资源,比如数据库连接或临时目录,非常方便。 总结来说,JUnit4的Rule机制提供了一种强大的方式来...

    junit4测试源码

    JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了编写和运行可重复、可靠的测试用例的工具。这个"junit4测试源码"可能包含了JUnit4框架的源代码,使得用户能够深入理解其内部工作原理,便于...

    在Eclipse中使用JUnit4进行单元测试

    对于需要延迟执行或者异步测试的情况,JUnit4提供了`@Rule`和`@ClassRule`注解,可以定义自定义的测试规则。例如,`Timeout`规则可以限制测试方法的执行时间,超过设定时间就会导致测试失败。 在Eclipse中运行单元...

    Junit简介和扩展

    自成立以来,JUnit已经成为xUnit家族中最成功的一员,该家族源自Kent Beck开发的sUnit。JUnit主要用于程序员进行白盒测试,即通过对程序内部逻辑结构的深入理解来进行测试。 **特性**: - **断言(Assertion)**:...

    JUnit设计模式分析及简化的JUnit代码

    例如,`@Rule`和`@ClassRule`注解就用于在测试执行前后注入特定的行为或资源。 其次,JUnit使用了工厂模式,尤其是`TestRule`接口,它定义了一个方法`apply()`,这个方法创建了一个测试监听器,可以在每次测试执行...

    JUnit学习笔记

    `@Rule`和`@ClassRule`可以用来定义自定义的测试规则,如测试失败时的日志记录或资源管理。 在进行参数化测试时,JUnit的`@Parameterized`注解非常有用。它可以将测试数据作为参数传入测试方法,从而实现对多种输入...

    JUnit4JUnit4JUnit4(文档)

    对于需要在每个测试之前或之后执行的复杂逻辑,可以使用 `@ClassRule` 和 `@Rule` 注解结合 `ExternalResource` 类实现。 10. **测试注解的继承**: 如果一个类被 `@RunWith` 或其他测试注解标记,那么它的子类将...

    Junit白盒测试学习文档

    8. **测试规则**:理解`@Rule`和`@ClassRule`,如何自定义测试规则,例如使用`TemporaryFolder`规则创建临时文件。 9. **测试辅助方法**:学习如何编写辅助方法,以提高测试代码的可读性和复用性。 10. **Mocking...

    test-rule-embedded-mongodb

    测试规则嵌入式mongodb 测试规则嵌入MongoDB是的一个JUnit @ClassRule包装支撑JUnit和斯波克。 在测试开始时它会触发 mongoDb 服务器,当测试结束时它会停止 mongoDb。二进制文件Mavan 示例: < dependency> ...

    junit教程,ppt,白盒黑盒测试方案等帮助文档打包下载

    在Java开发过程中,JUnit是不可或缺的工具,因为它可以帮助找出代码中的错误,提高软件的可靠性。本教程将深入探讨JUnit的基本使用方法和高级特性。 1. **安装与配置** - JUnit通常通过Maven或Gradle等构建工具...

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

    9. `@Rule` 和 `@ClassRule`:这两个注解用于引入自定义的测试规则,比如用于日志记录、资源管理等。 在实际开发中,我们可以通过组合使用这些注解来实现复杂的测试逻辑。例如,可以利用`@BeforeClass`和`@...

    elasticsearch-junit-rule:ElasticSearch 的 JUnit 规则

    总的来说,Elasticsearch-Junit-Rule 是一个强大的工具,它简化了在 Java 项目中使用 JUnit 进行 Elasticsearch 相关测试的流程,提高了开发效率和测试质量。如果你的项目依赖 Elasticsearch,那么这个规则无疑是一...

    Junit资料

    在更复杂的测试场景中,JUnit 4引入了`@Rule`和`@ClassRule`,允许自定义测试规则,如定时器、数据库事务管理等。JUnit 5进一步扩展了这一功能,引入了更灵活的测试接口和扩展机制。 关于源码,JUnit的源代码清晰且...

    myeclipse测试工具junit4

    2. **规则(Rule)**:JUnit4引入了规则概念,允许用户定义自定义的行为,如资源管理、日志记录等,通过`@ClassRule`或`@Rule`注解应用到测试类或测试方法。 3. **假设(Assumption)**:`Assume`类提供了假设方法...

    JUnit学习笔记之NetBeans入门篇

    对于更复杂的测试需求,JUnit还提供了`@Rule`和`@ClassRule`,可以定义自定义的测试规则,如`ExpectedException`规则可以捕获预期的异常。 总之,通过NetBeans的集成,JUnit为Java开发者提供了一个方便、高效的单元...

    rulz可复用的JUnit规则

    2. **创建和应用规则**:在JUnit测试类中,通过`@Rule`注解来声明和应用rulz提供的规则,如`@Rule public DatabaseSetupRule dbRule = new DatabaseSetupRule();`,这样每次测试执行前都会自动执行dbRule的逻辑。 3...

    Junit相关文档

    `@Rule`和`@ClassRule`注解可以定义自定义的测试规则,例如假设(Assumptions)机制,允许在测试开始前基于某些条件决定是否执行。 8. JUnit与其他工具的集成: - 集成持续集成服务器:如Jenkins、Travis CI等,...

    J2EE复习积累(三)-JUnit4概述(三)

    JUnit4是Java开发中最常用的单元测试框架,它是Java领域中进行测试驱动开发(TDD)和行为驱动开发(BDD)的重要工具。本篇文章将深入探讨JUnit4的核心概念、功能和使用方法。 **一、JUnit4简介** JUnit4是对JUnit3的...

    JUnit API English

    `@Rule`和`@ClassRule`可以应用于单个测试或整个测试类。 11. **Mocking and Stubbing**:虽然JUnit本身不包含模拟和桩函数功能,但可以与其他库如Mockito结合使用,以便在测试中隔离依赖。 12. **Extensions**:...

Global site tag (gtag.js) - Google Analytics