|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
他们对jsp,servlet,javabean进行封装就是为了展示他们的某个思想,与java的开发并没有必然的关系,也不见得在所以情况下,别人使用起来会简单。利用JUnit来测试Java代码中的非常有良多种体例,你晓得几种?
给定如许一个class。
Person.java- 12345678910111213141516171819202122232425
复制代码- publicclassPerson{privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age<0){thrownewIllegalArgumentException("ageisinvalid");}this.age=age;}}
复制代码 我们来测试setAge办法。
Try-catch体例
- @TestpublicvoidshouldGetExceptionWhenAgeLessThan0(){Personperson=newPerson();try{person.setAge(-1);fail("shouldgetIllegalArgumentException");}catch(IllegalArgumentExceptionex){assertThat(ex.getMessage(),containsString("ageisinvalid"));}}
复制代码 这是最简单想到的一种体例,可是太隆
JUnitannotation体例
JUnit中供应了一个expected的annotation来反省非常。- @Test(expected=IllegalArgumentException.class)publicvoidshouldGetExceptionWhenAgeLessThan0(){Personperson=newPerson();person.setAge(-1);}
复制代码 这类体例看起来要简便多了,可是没法反省非常中的动静。
ExpectedExceptionrule
JUnit7今后供应了一个叫做ExpectedException的Rule来完成对非常的测试。- @RulepublicExpectedExceptionexception=ExpectedException.none();@TestpublicvoidshouldGetExceptionWhenAgeLessThan0(){Personperson=newPerson();exception.expect(IllegalArgumentException.class);exception.expectMessage(containsString("ageisinvalid"));person.setAge(-1);}
复制代码 这类体例既能够反省非常范例,也能够考证非常中的动静。
利用catch-exception库
有个catch-exception库也能够完成对非常的测试。
起首援用该库。
pom.xml- <dependency><groupId>com.googlecode.catch-exception</groupId><artifactId>catch-exception</artifactId><version>1.2.0</version><scope>test</scope><!--testscopetouseitonlyintests--></dependency>
复制代码 然后如许誊写测试。- publicclassPerson{privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age<0){thrownewIllegalArgumentException("ageisinvalid");}this.age=age;}}0
复制代码- publicclassPerson{privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age<0){thrownewIllegalArgumentException("ageisinvalid");}this.age=age;}}1
复制代码 如许的优点是能够精准的考证非常是被测办法抛出来的,而不是别的办法抛出来的。
catch-exception库还供应了多种API来举行测试。
先加载fest-assertion库。- publicclassPerson{privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age<0){thrownewIllegalArgumentException("ageisinvalid");}this.age=age;}}2
复制代码- publicclassPerson{privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age<0){thrownewIllegalArgumentException("ageisinvalid");}this.age=age;}}3
复制代码 然后能够誊写BDD作风的测试。- publicclassPerson{privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age<0){thrownewIllegalArgumentException("ageisinvalid");}this.age=age;}}4
复制代码- publicclassPerson{privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age<0){thrownewIllegalArgumentException("ageisinvalid");}this.age=age;}}5
复制代码 假如喜好Hamcrest作风的考证作风的话,catch-exception也供应了响应的MatcherAPI。- publicclassPerson{privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age<0){thrownewIllegalArgumentException("ageisinvalid");}this.age=age;}}4
复制代码- publicclassPerson{privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){if(age<0){thrownewIllegalArgumentException("ageisinvalid");}this.age=age;}}7
复制代码 第一种最土鳖,第二种最简便,第四种最靠谱。
java也能做一些底层语言开发做的事情(难度很高,不是java顶尖高手是做不来的), |
|