
Junit Rules
InterceptorsH1
Junit4.7引入了一个新功能叫做”Interceptors”,旨在以一个更为清晰简单的API,带回JUnitmeta-testing的能力。但是之后又被重新命名为”Rule”。
Meta-testingH2
Junit擅长表达尽量少的测试逻辑。在Junit3中,你能够以不同的方式控制测试运行过程。Junit4简化的代价就是失去了这个“meta-testing”。这不影响简单测试,但是限制了更为强大的测试。现在Junit4重新把meta-testing带了回来。
比如说,你想输出一个log当每个测试失败的时候。
bash
@Interceptorpublic StatementInterceptor logger=new LoggingInterceptor();
声明了@Interceptor,logger会在测试运行之前被调用。当前,interceptors并不是准表的test runner的一部分,所以你必须用一个特殊的runner来运行测试。
bash
@RunWith(Interceptors.class)public class MyLoggingTest {@Interceptorpublic StatementInterceptor logger=new LoggingInterceptor();}
RulesH1
Rules允许灵活的添加或者重新定义测试case中的每一个测试方法行为。测试者可以重复利用或者扩展Junit框架提供的Rules,或者书写自己的Rules。
TemporaryFolder RuleH2
TemporaryFolder Rule允许创建文件和文件夹并且在测试方法完成之后删除它们
bash
public static class HasTempFolder {@Rulepublic TemporaryFolder folder = new TemporaryFolder();@Testpublic void testUsingTempFolder() throws IOException {File createdFile = folder.newFile("myfile.txt");File createdFolder = folder.newFolder("subfolder");// ...}}
ExternalResource RulesH2
ExternalResource Rule是可以在测试之前设置一个外部资源 (a file, socket, server, database connection, etc.),并且保证在结束时关闭它们的Rule的基类,例如TemporaryFolder Rule。
bash
public static class UsesExternalResource {Server myServer = new Server();@Rulepublic ExternalResource resource = new ExternalResource() {@Overrideprotected void before() throws Throwable {myServer.connect();};@Overrideprotected void after() {myServer.disconnect();};};@Testpublic void testFoo() {new Client().run(myServer);}}
ErrorCollector RuleH2
ErrorCollector Rule允许测试继续执行当发生错误的时候(比如说,来收集表中的所有的错误行,然后汇总报告)
bash
public static class UsesErrorCollectorTwice {@Rulepublic ErrorCollector collector= new ErrorCollector();@Testpublic void example() {collector.addError(new Throwable("first thing went wrong"));collector.addError(new Throwable("second thing went wrong"));}}
Verifier RuleH2
Verifier Rule是ErrorCollector等Rules的基类,当verification check失败的时候会导致测试方法失败。
bash
public static class ErrorLogVerifier {private ErrorLog errorLog = new ErrorLog();@Rulepublic Verifier verifier = new Verifier() {@Override public void verify() {assertTrue(errorLog.isEmpty());}}@Test public void testThatMightWriteErrorLog() {// ...}}
评论
新的评论
上一篇
同源策略
同源策略 Same-Origin Policy 根据 origin 限制浏览器通过脚本或者文档执行特定的动作。 origin 指的是URL的path之前的所有的部分(比如说, http://www.example.com )。对于一些动作,浏览器会比较origins,如果它们…
下一篇
FLAG_ACTIVITY_CLEAR_TOP launches new instance
错误 在使用 NavUtils.navigateUpFromSameTask(this) 导航到父Activity时,页面切换的动画是从右往左滑动,这样的动画看起来不像是返回动画,而是打开了一个新的页面的动画。 原因 SDK版本小于16时, NavUtilsImpl 的实现是 …
