北京建设主管部门官方网站,个人音乐网站程序源码,昌乐网页设计,凡科轻站小程序收费吗1.0 Rules
Rules允许非常灵活地添加或重新定义一个测试类中每个测试方法的行为。测试人员可以重复使用或扩展下面提供的Rules之一#xff0c;或编写自己的Rules。
1.1 TestName
TestName Rule使当前的测试名称在测试方法中可用。用于在测试执行过程中获取测试方法名称…
1.0 Rules
Rules允许非常灵活地添加或重新定义一个测试类中每个测试方法的行为。测试人员可以重复使用或扩展下面提供的Rules之一或编写自己的Rules。
1.1 TestName
TestName Rule使当前的测试名称在测试方法中可用。用于在测试执行过程中获取测试方法名称。在starting()中记录测试方法名在getMethodName()中返回
例如
import static org.junit.Assert.*;import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;public class NameRuleTest {Rulepublic final TestName name new TestName();Testpublic void testA() {assertEquals(testA, name.getMethodName());}Testpublic void testB() {assertEquals(testB, name.getMethodName());}
}1.2 TemporaryFolder
TemporaryFolder Rule允许创建文件和文件夹这些文件和文件夹在测试方法结束时被删除无论通过还是失败。默认情况下如果资源不能被删除则不会抛出异常。
import java.io.*;import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;public class HasTempFolder {Rulepublic TemporaryFolder folder new TemporaryFolder();Testpublic void testUsingTempFolder() throws IOException {File createdFile folder.newFile(myfile.txt);File createdFolder folder.newFolder(subfolder);// ...}}TemporaryFolder#newFolder(String… folderNames)可以根据输入的参数创建目录。如果是多级目录可以递归创建。
TemporaryFolder#newFile()可以创建一个随机名字的临时文件
TemporaryFolder##newFolder() 可以创建一个随机名字的临时目录。
1.3 ExternalResource
ExternalResource是一个规则如TemporaryFolder的基类它在测试前设置了一个外部资源一个文件、套接字、服务器、数据库连接等并保证在测试后将其拆除。
可以设置测试前后需要做的事情比如文件、socket、服务、数据库的连接与关闭。 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);}}ExternalResource#before会在每个测试之前处理#after会在每个测试之后处理
关于ExternalResource与Before已经After等标记步骤的执行顺序我们会在本文后面部分介绍。
1.4 ErrorCollector
ErrorCollector这个Rule在出现一个错误后还可以让测试继续进行下去。
他提供三个方法
checkThat(final T value, Matcher matcher)checkSucceeds(Callable callable)addError(Throwable error)
前面两个是用来处理断言的最后一个是添加错误至错误列表中。
看下面例子 package mytest;import static org.hamcrest.CoreMatchers.is;import static org.junit.Assert.assertThat;import java.util.concurrent.Callable;import org.junit.Rule;import org.junit.Test;import org.junit.rules.ErrorCollector;public class JUnitCoreErrorControllerRuleTest {private final int multiplesOf2[] { 0, 2, 4, 7, 8, 11, 12 };Rulepublic ErrorCollector errorCollector new ErrorCollector();/** 下面这个测试会报告两个failures。这一点和下面的checkSucceeds测试不同*/Testpublic void testMultiplesOf2() {int multiple 0;for (int multipleOf2 : multiplesOf2) {// Will count the number of issues in this list// - 3*2 6 not 7, 5*2 10 not 11 : 2 FailureserrorCollector.checkThat(2 * multiple, is(multipleOf2));multiple;}}/** 下面代码中有两个断言会失败但每次运行JUnit框架只会报告一个。这一点和上面的checkThat测试不同可以对比一下。*/Testpublic void testCallableMultiples() {errorCollector.checkSucceeds(new CallableObject() {public Object call() throws Exception {assertThat(2 * 2, is(5));assertThat(2 * 3, is(6));assertThat(2 * 4, is(8));assertThat(2 * 5, is(9));return null;}});}/** 下面运行时会报告2个错误*/Testpublic void testAddingAnError() {assertThat(2 * 2, is(4));errorCollector.addError(new Throwable(Error Collector added an error));assertThat(2 * 3, is(6));errorCollector.addError(new Throwable(Error Collector added a second error));}}运行结果 Failed tests: testCallableMultiples(mytest.JUnitCoreErrorControllerRuleTest): Expected: is 5but: was 4testMultiplesOf2(mytest.JUnitCoreErrorControllerRuleTest): Expected: is 7but: was 6testMultiplesOf2(mytest.JUnitCoreErrorControllerRuleTest): Expected: is 11but: was 10Tests in error: testAddingAnError(tangzhi.mytest.JUnitCoreErrorControllerRuleTest): Error Collector added an errortestAddingAnError(tangzhi.mytest.JUnitCoreErrorControllerRuleTest): Error Collector added a second error从这个例子可以看出
ErrorCollector#checkThat 会报告测试中的每一个failuresErrorCollector#checkSucceeds 只会检查是否成功如果不成功只报告第一个导致不成功的failureErrorCollector#addError 是添加一个错误(error)。
1.5 Verifier
如果你想在每个测试之后甚至是在After之后想检查些什么就可以使用Verifier这个Rule.
看例子 private static String sequence;public static class UsesVerifier {Rulepublic Verifier collector new Verifier() {Overrideprotected void verify() {sequence verify ;}};Testpublic void example() {sequence test;}Testpublic void example2() {sequence test2;}Afterpublic void after() {sequence after;}}Testpublic void verifierRunsAfterTest() {sequence ;assertThat(testResult(UsesVerifier.class), isSuccessful());assertEquals(test after verify test2 after verify , sequence);}从上面例子可以看出:Verifier#verify针对每个测试都会运行一次并且运行在After步骤之后。
需要说明如果某测试出现失败(fail)那么这个测试之后就不会做verify,这一点可以结合下面的例子看出
1.6 TestWatcher
对测试的每个步骤进行监控。
看例子 package tangzhi.mytest;import static org.junit.Assert.*; import static org.hamcrest.CoreMatchers.*;import org.junit.After;import org.junit.Rule;import org.junit.Test;import org.junit.rules.TestRule;import org.junit.rules.TestWatcher;import org.junit.rules.Verifier;import org.junit.runner.Description;import org.junit.runners.model.Statement;public class WatchmanTest {private static String watchedLog;Rulepublic TestRule watchman new TestWatcher() {Overridepublic Statement apply(Statement base, Description description) {Statement s super.apply(base, description);watchedLog;System.out.println(watch apply.);return s;}Overrideprotected void succeeded(Description description) {watchedLog description.getDisplayName() success!;System.out.println(watch succeed:watchedLog);}Overrideprotected void failed(Throwable e, Description description) {watchedLog description.getDisplayName() e.getClass().getSimpleName();System.out.println(watch failed:watchedLog);}Overrideprotected void starting(Description description) {super.starting(description);System.out.println(watch starting.);}Overrideprotected void finished(Description description) {super.finished(description);System.out.println(watch finished.);}};Rulepublic Verifier collector new Verifier() {Overrideprotected void verify() {System.out.println(Verify:watchedLog);}};Testpublic void fails() {System.out.println(in fails);assertThat(ssss, is(sss));}Testpublic void succeeds() {System.out.println(in succeeds);}Afterpublic void after() {System.out.println(After);}}1.7 Timeout
对于添加了TimeoutRule 的测试类当测试类中的测试方法执行超过TimeoutRule 配置的时间时测试方法执行就会被标记为失败
public class TimeoutRuleTest {Rulepublic Timeout globalTimeout Timeout.seconds(5);Testpublic void timeout() throws InterruptedException {TimeUnit.SECONDS.sleep(10);}Testpublic void onTime() throws InterruptedException {TimeUnit.SECONDS.sleep(2);}}执行上面测试用例onTime方法执行通过timeout()方法则抛出TestTimedOutException
org.junit.runners.model.TestTimedOutException: test timed out after 5 seconds还有很多Rule就不一一介绍了
行动吧在路上总比一直观望的要好未来的你肯定会感 谢现在拼搏的自己如果想学习提升找不到资料没人答疑解惑时请及时加入扣群 320231853里面有各种软件测试开发资料和技术可以一起交流学习哦。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走
这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你