java单元测试之道_《单元测试之道java》随笔

用JUnit′写测试真正所需要的就三件事:

1.一个import语句引入所有junit .framework.*下的类。

2.一个extends语句让你的类从Testcase 继承。

3.一个调用super(string)的构造函数。

每个测试的运行都应该是互相独立的;从而可以在任何时候,以任意顺序运行每个单独的测试。

为了获得这样的好处,在每个测试开始之前,都需要重新设置某些测试环境,或者在测试完成之后需要释放一些资源。JUnit 的 Testcase基类提供两个方法供改写,分别用于环境的建立和清理;

一个测试类包含一些测试方法;每个方法包含一个或者多个断言语句。但是测试类也能调用其他测试类:单独的类、包、甚至完整的一个系统。

可以通过创建test suite来取得。任何测试类都能包含一个名为suite的静态方法:

public static Test suite ( ) ;

你可以提供suite()方法来返回任何你想要的测试集合(没有suite()方法,JUnit会自动运行所有的test...方法 ),但是你可能需要手工添加特殊的测试,包括其他suite .

一般而言,一个测试方法会包含有多个断言,因为你需要验证该方法的多个方面以及内在的多种联系。当一个断言失败的时候,该测试方法将会被中止,从而导致该方法中剩余的断言这次就无法执行了。

此时不能有别的想法,而只能是在继续测试之前先修复这个失败的测试。依此类推不断地修复一个又一个的测试,沿着这条路径慢馒前进。

在实践中,当引人一个bug 的时候,只有一到两个测试会失败。在这种情况下,把问题分离出来将会相当容易。当有测试失败的时候,无论如何都不能给原有代码再添加新的特性,所以要尽快地修复错误直到让所有的测试都能顺利通过。为了遵行这种原则,你需要一种能够运行所有测试——或者一组测试、某个特殊子系统等等的辅助方法。

在前面“求最大值”的例子中,我们发现了几个边界条件:最大值位于数组末尾、数组包含负数,或者数组为空等等。

找边界条件是做单元测试中最有价值的工作之一,因为bug一般就出现在边界上。--些需要你考虑的条件有:

1、完全伪造或者不一致的输入数据﹐

2、格式错误的数据,例如没有顶层域名的电子邮件地址,就像fredefoobar这样的。

3、空值或者不完整的值(如o,0.0、""和null )

4、一些与意料中的合理值相去甚远的数值。例如一个人的岁数为1 000 岁。

5、如果要求的是不允许出现重复数值的 list,但是传入的是一个存在重复数值的 list。如果要求的是一个有序 list,但是传入的是一个无序的list;或者反之。例如,给一个要求排好序的算法传人一个未排序的 list——甚至一个反序的 list。

6、事情到达的次序是错误的,或者碰巧和期望的次序不一致。例如,在未登录系统之前,就尝试打印文档。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整的中文版《单元测试之道C#版》。单元测试不但会使你的工作完成得更轻松,而且会令你的设计变得更好,甚至大大减少你花在调试上面的时间。 在我们上面的小故事里面,Pat 因为假设底层的代码是正确无误的而卷入麻烦之中,先是高层代码中使用了底层代码;然后这些高层代码又被更高层的代码所使用,如此往复。在对这些代码的行为没有任何信心的前提下,Pat 等于是在假设上面用竖立卡片堆砌了一间房子——只要将下面卡片轻轻移动,整间房子就会轰然倒塌。 当基本的底层代码不再可靠时,那么必需的改动就无法只局限在底层。虽然你可以修正底层的问题,但是这些对底层代码的修改必然会影响到高层代码,于是高层代码也连带地需要修改;以此递推,就很可能会动到更高层的代码。于是,一个对底层代码的修正,可能会导致对几乎所有代码的一连串改动,从而使修改越来越多,也越来越复杂。于是,整间由卡片堆成的房子就由此倒塌,从而使整个项目也以失败告终。 Pat 总是说:“这怎么可能呢?”或者“我实在想不明白为什么会这样”。如果你发现自己有时候也会有这种想法,那么这通常是你对自己的代码还缺乏足够信心的表现——你并不能确认哪些是工作正常的而哪些不是。 为了获得Dale 所具有的那种对代码的信心,你需要“询问”代码究竟做了什么,并检查所产生的结果是否确实和你所期望的一致。 这个简单的想法描述了单元测试的核心内涵:这个简单有效的技术就是为了令代码变得更加完美。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值