在junit中定义一些可以公用的规则(Rule),类似拦截器和拦截器链的概念.在Junit4版本中针对不同的版本Rule的接口不一样,在Junit4.11和Junit4.10 采用实现TestRule接口.在Junit4.8采用的MethodRule接口.
备注:
RestFuse使用1.2.0,
Junit采用4.10版本.
如在RestFuse中定义Destination实现TestRule接口.实现apply方法:
public Statement apply(Statement base, Description description);
使用如下:
package com.easyway.restfuse; import org.junit.Rule; import org.junit.runner.RunWith; import com.eclipsesource.restfuse.Destination; import com.eclipsesource.restfuse.HttpJUnitRunner; import com.eclipsesource.restfuse.Method; import com.eclipsesource.restfuse.Response; import com.eclipsesource.restfuse.annotation.Context; import com.eclipsesource.restfuse.annotation.HttpTest; /** * * @author longgangbai * */ @RunWith( HttpJUnitRunner.class ) public class RestfuseTest { @Rule public Destination destination = new Destination("", "http://restfuse.com" ); @Context private Response response; // will be injected after every request @HttpTest( method = Method.GET, path = "/" ) public void checkRestfuseOnlineStatus() { System.out.println( response); } }
在junit4中Rule怎么调用的呢?
在BlockJUnit4ClassRunner中的methodBlock中进行测试方法的各种操作.如BeforeMethod,AfterMethod等的组装为Statement .
protected Statement methodBlock(FrameworkMethod method) { Object test; try { test = new ReflectiveCallable() { protected Object runReflectiveCall() throws Throwable { return BlockJUnit4ClassRunner.this.createTest(); } }.run(); } catch (Throwable e) { return new Fail(e); } Statement statement = methodInvoker(method, test); statement = possiblyExpectingExceptions(method, test, statement); statement = withPotentialTimeout(method, test, statement); statement = withBefores(method, test, statement); statement = withAfters(method, test, statement); statement = withRules(method, test, statement); return statement; }
其中最后一个withRules,同时可以看出possiblyExpectingExceptions,withPotentialTimeout,withBefores,withAfters被不推荐使用.其实他们几个都可以采用Rule的方式现实,这也是不推荐使用的主要原因.
具体的Rule相关的源代码:
private Statement withRules(FrameworkMethod method, Object target, Statement statement) { List testRules = getTestRules(target); Statement result = statement; result = withMethodRules(method, testRules, target, result); result = withTestRules(method, testRules, result); return result; } private Statement withMethodRules(FrameworkMethod method, List<TestRule> testRules, Object target, Statement result) { for (MethodRule each : getMethodRules(target)) { if (!(testRules.contains(each))) { result = each.apply(result, method, target); } } return result; } private List<MethodRule> getMethodRules(Object target) { return rules(target); } protected List<MethodRule> rules(Object target) { return getTestClass().getAnnotatedFieldValues(target, Rule.class, MethodRule.class); } private Statement withTestRules(FrameworkMethod method, List<TestRule> testRules, Statement statement) { return new RunRules(statement, testRules, describeChild(method)); } protected List<TestRule> getTestRules(Object target) { List result = getTestClass().getAnnotatedMethodValues(target, Rule.class, TestRule.class); result.addAll(getTestClass().getAnnotatedFieldValues(target, Rule.class, TestRule.class)); return result; }
可以看出Rule不仅有类级别的还有方法的级别的.
相关推荐
例如,JUnit自带的`ExpectedException` Rule可以帮助我们捕获和验证预期的异常: ```java import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; public class MyTest { @...
在实际开发中,`@Rule`还可以与其他JUnit注解一起使用,如`@BeforeClass`和`@AfterClass`,以确保测试类级别的资源管理。例如,可以创建一个`ClassRule`来初始化一次性的测试环境,如数据库连接池。 总的来说,通过...
在Junit中,设计模式的应用极大地增强了其灵活性和可扩展性。下面我们将深入探讨Junit中涉及到的设计模式及其作用。 1. 工厂模式:JUnit中的`TestSuite`类就是一个典型的工厂模式应用,它根据传入的类或测试方法...
JUnit 是一个广泛使用的Java单元测试框架,由著名软件开发者Erich Gamma和Kent Beck共同创建。设计模式在JUnit的实现中扮演了重要角色,使得测试代码易于编写、持久且可扩展。JUnit的目标是简化测试编写,确保测试的...
JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可重复运行的测试用例,以确保代码的正确性和稳定性。JUnit3.8.1是该框架的一个较早版本,尽管现在已经有更新的版本(如JUnit5),但了解其基本...
标题“探索JUnit4扩展:使用Rule”涉及到的是Java单元测试框架JUnit的一个高级特性,即`@...通过研究这些内容,开发者可以更直观地学习如何定义和使用`@Rule`,以及如何将其应用于实际项目中,提升测试的质量和效率。
JUnit的使用.doc JUnit的使用.doc
JUnit4 使用方法 JUnit4 是一个流行的 Java 单元测试框架,提供了许多功能强大且灵活的测试工具。...通过学习 JUnit4 的使用方法和核心概念,可以提高测试效率和测试质量,确保软件的可靠性和稳定性。
JUnit的最新版本是JUnit 5,它分为JUnit Platform、JUnit Jupiter和JUnit Vintage三个模块,提供了更强大的测试能力和更好的兼容性。 ### 安装与引入 在Maven项目中,添加以下依赖到pom.xml文件中,即可引入JUnit 5...
在Eclipse中使用JUnit4进行单元测试是一种常见的Java开发实践,它可以帮助开发者确保代码的正确性和稳定性。单元测试是软件开发中的重要环节,通过编写针对代码各个独立模块的测试用例,可以验证代码功能是否按预期...
(在此文档中我使用JUnit的版本为JUnit4.3.1)先检查一下你的Eclipse环境是否已经有编写JUnit测试类的环境了,如果有了就可以直接使用了,如果没有安装,请参考以下操作,如:在Eclipse要安装那些插件和写JUnit测试...
7. **查看测试结果**:测试执行完毕后,会生成详细的测试报告,包括成功、失败、错误等信息,帮助我们分析和调试代码。 在"JunitTest"这个压缩包中,可能包含了演示如何在Android环境中使用Junit进行单元测试的相关...
《Junit使用详解》 Junit,作为Java编程语言中最为...配合PPT讲解和文档`Junit使用入门.doc`,相信能让你对Junit有更深入的理解。 请参考提供的`junit.jar`文件,将其导入到你的项目中,开始你的Junit测试之旅吧!
A JUnit rule to easily override Dagger 2 objects More info about testing using Dagger 2 and Mockito are available in this Medium post. Overriding an object managed by Dagger 2 is not easy, you ...
通过理解和应用这些设计模式,我们可以更有效地使用JUnit,提高测试的质量和效率。同时,这些模式也是软件工程中通用的最佳实践,能够帮助我们编写出更加灵活、可维护的代码。因此,深入研究JUnit的设计模式对于提升...
JUnit的架构主要由三个部分组成:Test Runner、Test Case和Assertion。Test Runner是JUnit的执行引擎,负责执行测试用例。Test Case是测试用例的集合,每个测试用例都包含多个测试方法。Assertion是JUnit中的断言...