首页 > 代码库 > 【JUnit4.10源代码分析】5.2 Rule
【JUnit4.10源代码分析】5.2 Rule
TestRule声明工厂方法
TestRule是一个工厂方法模式中的Creator角色——声明工厂方法。
package org.junit.rules; import org.junit.runner.Description; import org.junit.runners.model.Statement; public interface TestRule { Statement apply(Statement base, Description description); }
测试程序员要使用Rule,必须编写代码:
1.MyStatement——Statement的一个新的装饰对象。( JUnit之Rule的使用中的例子),地位等同于ExpectException。
package rule; import static tool.Print.*;//pln(Object) import org.junit.runners.model.Statement; /** * * @author yqj2065 */ public class MyStatement extends Statement { private final Statement base; public MyStatement( Statement base ) { this.base = base; } @Override public void evaluate() throws Throwable { pln( "before...sth..sth" ); try { base.evaluate(); } finally { pln( "after...sth..sth" ); } } }2.一个具体的工厂,也就是定义工厂方法的TestRule的子类。MyRule将创建一个Statement的新的装饰对象MyStatement。如同工厂方法模式的一般用法,具体工厂与具体产品一一对应。
package rule; import org.junit.rules.TestRule; import org.junit.runners.model.Statement; import org.junit.runner.Description; public class MyRule implements TestRule { @Override public Statement apply(Statement base, Description description) { return new MyStatement( base ); } }3.使用新的装饰对象
用户类BlockJUnit4ClassRunner使用的是ExpectException等JUnit内建的Statement装饰对象;测试程序员编写的Statement装饰对象,则需要通过@Rule,嵌入到单元测试类中。
package rule; import org.junit.Rule; import org.junit.Test; public class MyTest { @Rule public MyRule myRule = new MyRule(); @Test() public void xx() { System.out.println( "xx()..." ); } }在开发环境中运行MyTest,输出:
before...sth..sth
xx()...
after...sth..sth
RuleChain
【JUnit4.10源代码分析】5.2 Rule
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。