中国联通整改移动联通IPTV整改什么意思

使用JUnit测试预期异常 - ImportNew
开发人员常常使用单元测试来验证的一段儿代码的操作,很多时候单元测试可以检查抛出预期异常(expected exceptions)的代码。在Java语言中,JUnit是一套标准的单元测试方案,它提供了很多验证抛出的异常的机制。本文就探讨一下他们的优点。
我们拿下面的代码作为例子,写一个测试,确保canVote() 方法返回true或者false, 同时你也能写一个测试用来验证这个方法抛出的IllegalArgumentException异常。
public class Student {
public boolean canVote(int age) {
if (i&=0) throw new IllegalArgumentException(&age should be +ve&);
(Guava类库中提供了一个作参数检查的工具类–Preconditions类,也许这种方法能够更好的检查这样的参数,不过这个例子也能够检查)。
检查抛出的异常有三种方式,它们各自都有优缺点:
1.@Test(expected…)
@Test注解有一个可选的参数,”expected”允许你设置一个Throwable的子类。如果你想要验证上面的canVote()方法抛出预期的异常,我们可以这样写:
@Test(expected = IllegalArgumentException.class)
public void canVote_throws_IllegalArgumentException_for_zero_age() {
Student student = new Student();
student.canVote(0);
简单明了,这个测试有一点误差,因为异常会在方法的某个位置被抛出,但不一定在特定的某行。
2.ExpectedException
如果要使用JUnit框架中的ExpectedException类,需要声明ExpectedException异常。
public ExpectedException thrown= ExpectedException.none();
然后你可以使用更加简单的方式验证预期的异常。
public void canVote_throws_IllegalArgumentException_for_zero_age() {
Student student = new Student();
thrown.expect(IllegalArgumentException.class);
student.canVote(0);
或者可以设置预期异常的属性信息。
public void canVote_throws_IllegalArgumentException_for_zero_age() {
Student student = new Student();
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage(&age should be +ve&);
student.canVote(0);
除了可以设置异常的属性信息之外,这种方法还有一个优点,它可以更加精确的找到异常抛出的位置。在上面的例子中,在构造函数中抛出的未预期的(unexpected) IllegalArgumentException 异常将会引起测试失败,我们希望它在canVote()方法中抛出。
从另一个方面来说,如果不需要声明就更好了
public ExpectedException thrown= ExpectedException.none();
它就像不需要的噪音一样,如果这样就很好了
expect(RuntimeException.class)
expect(RuntimeException.class, “Expected exception message”)
或者至少可以将异常和信息当做参数传进去
thrown.expect(IllegalArgumentException.class, “age should be +ve”);
3.Try/catch with assert/fail
在JUnit4之前的版本中,使用try/catch语句块检查异常
public void canVote_throws_IllegalArgumentException_for_zero_age() {
Student student = new Student();
student.canVote(0);
} catch (IllegalArgumentException ex) {
assertThat(ex.getMessage(), containsString(&age should be +ve&));
fail(&expected IllegalArgumentException for non +ve age&);
尽管这种方式很老了,不过还是非常有效的。主要的缺点就是很容易忘记在catch语句块之后需要写fail()方法,如果预期异常没有抛出就会导致信息的误报。我曾经就犯过这样的错误。
总之,这三种方法都可以测试预期抛出的异常,各有优缺点。对于我个人而言,我会选择第二种方法,因为它可以非常精确、高效的测试异常信息。
原文链接:
- 译文链接: [ 转载请保留原文出处、译者和译文链接。]
关于作者:
个人主页:
新浪微博:
我又更新了几篇,保留原文链接即可:http://blog.csdn.net/u/a...
关于ImportNew
ImportNew 专注于 Java 技术分享。于日 11:11正式上线。是的,这是一个很特别的时刻 :)
ImportNew 由两个 Java 关键字 import 和 new 组成,意指:Java 开发者学习新知识的网站。 import 可认为是学习和吸收, new 则可认为是新知识、新技术圈子和新朋友……
新浪微博:
推荐微信号
反馈建议:@
广告与商务合作QQ:
– 好的话题、有启发的回复、值得信赖的圈子
– 写了文章?看干货?去头条!
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 活跃 & 专业的翻译小组
– 国内外的精选博客文章
– UI,网页,交互和用户体验
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
& 2017 ImportNew2011年10月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类。
1.assertTrue/False([String message,]boolean condition);
& & 判断一个条件是true还是false。感觉这个最好用了,不用记下来那么多的方法名。
2.fail([String message,]);
& & 失败,可以有消息,也可以没有消息。
3.assertEquals([String message,]Object expected,Object actual);
& & 判断是否相等,可以指定输出错误信息。
& & 第一个参数是期望值,第二个参数是实际的值。
& & 这个方法对各个变量有多种实现。在JDK1.5中基本一样。
& & 但是需要主意的是float和double最后面多一个delta的值,可能是误差范围,不确定这个单词什么意思,汗一个。
4.assertNotNull/Null([String message,]Object obj);
& & 判读一个对象是否非空(非空)。
5.assertSame/NotSame([String message,]Object expected,Object actual);
& & 判断两个对象是否指向同一个对象。看内存地址。
7.failNotSame/failNotEquals(String message, Object expected, Object actual)
& & 当不指向同一个内存地址或者不相等的时候,输出错误信息。
& & 注意信息是必须的,而且这个输出是格式化过的。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1899415次
积分:18147
积分:18147
排名:第441名
原创:249篇
转载:215篇
评论:322条
阅读:53427
(5)(2)(1)(1)(2)(3)(6)(4)(1)(1)(2)(12)(2)(15)(33)(35)(9)(12)(17)(3)(5)(2)(11)(42)(6)(21)(24)(14)(1)(1)(6)(14)(24)(3)(6)(13)(3)(6)(5)(12)(19)(22)(24)(14)junit(3)
junit中的assert方法全部放在Assert类中,总结一下junit类中assert方法的分类。
1.assertTrue/False([String message,]boolean condition);
&&& 判断一个条件是true还是false。感觉这个最好用了,不用记下来那么多的方法名。
2.fail([String message,]);
&&& 失败,可以有消息,也可以没有消息。
3.assertEquals([String message,]Object expected,Object actual);
&&& 判断是否相等,可以指定输出错误信息。
&&& 第一个参数是期望值,第二个参数是实际的值。
&&& 这个方法对各个变量有多种实现。在JDK1.5中基本一样。
&&& 但是需要主意的是float和double最后面多一个delta的值。
4.assertNotNull/Null([String message,]Object obj);
&&& 判读一个对象是否非空(非空)。
5.assertSame/NotSame([String message,]Object expected,Object actual);
&&& 判断两个对象是否指向同一个对象。看内存地址。
7.failNotSame/failNotEquals(String message, Object expected, Object actual)
&&& 当不指向同一个内存地址或者不相等的时候,输出错误信息。
&&& 注意信息是必须的,而且这个输出是格式化过的。
转载自:http://blog.csdn.net/hahalzb/article/details/6091019
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:323465次
积分:5821
积分:5821
排名:第3900名
原创:258篇
转载:147篇
评论:36条
我的邮箱(#换为@):snailknight#yeah.net
github地址:
(8)(10)(8)(8)(11)(10)(11)(6)(28)(28)(37)(22)(42)(29)(5)(38)(62)(36)(9)(2)

我要回帖

更多关于 中国移动巡视整改报告 的文章

 

随机推荐