JUnit最佳实践
来源:互联网 发布:市场数据分析报告范文 编辑:程序博客网 时间:2024/05/21 03:57
JUnit最佳实践
以下是对JUnit实践的一个很好的总结,信息来源于一些比较权威的JUnit书籍和网上资料。这里集合如下(持续更新~~):
- 每次只对一个对象进行UT测试(unit-test one object at atime)。这样能使你尽快发现问题,而不被各个对象之间的复杂关系所迷惑。
- 给测试起一个好名字(choose meaningful test method names)。应该是形如testXXXYYY()这样的格式来命名你的测试方法。前缀test是JUnit查找测试方法的依据,XXX应该是你测试的方法名,YYY应该是你测试的状态。当然如果你只有一种状态需要测试可以直接命名为testXXX()。
- 明确写出出错的原因(explain the failure reason in assertcalls)。在使用assertTrue, assertFalse,assertNotNull, assertNull方法时,应该将可能的错误的描述字符串,以第一个参数传入相应的方法。这样你就可以迅速找出出错的原因。
- 一个UT测试方法只应该测试一种情况(one unit test equals onetestMethod)。一个方法中的多次测试,只会混乱你的测试目的。
- 测试任何可能的错误(test anything that could possiblyfail)。你的测试代码不是为了证明你是对的,而是为了证明你没有错。因此对测试一定要全面,比如边界值,正常值,错误值;对代码可能出现的问题要全面检测。
- 让你的测试帮助改善你的代码(let the test improve thecode)。测试代码永远是我们代码的第一个用户,所以不仅让它帮我们发现Bug,还要帮我们改善设计,这就是著名的TDD
- 一样的包,不同的位置(same package, separate directories)。测试的代码和被测试的代码应该放到不同的文件夹中,建议使用这种目录src/java/代码,src/test/测试代码。这样可以让两份代码使用一样的包结构,但是放在不同的目录下。
- 关于setUp和tearDown
- 不要用TestCase的构造函数来初始化Fixture,而要用setUp()和tearDown()方法
- 在setUp()和tearDown()中的代码不应该是与测试相关的,而是应该与全局相关的。如:针对与测试方法都要用到的数据库链接等等
- 当继承一个测试类的时候,需要调用父类的setUp和tearDown方法
- 不要在mock对象中牵扯到业务逻辑(don’t write business logicin mock objects)
- 只对可能产生错误的地方进行测试(only test what canpossibly break) 。如:一个类中频繁改动的函数。对于那些仅仅只含有getter/setter的类,如果是由IDE生成的,则可以不测;如果是人工写,那么最好测试一下
- 尽量不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺序从Vector中取出测试方法
- 避免编写有副作用的TestCase,你要确信保持你的测试方法之间是独立的
- 将测试代码和工作代码放在一起,一边同步编译和更新
- 确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试
- 如果你编写的软件是面向国际市场,编写测试时要考虑国际化因素。不要仅用母语的Locale进行测试
- 尽可能的利用JUnit提供的assert/fail方法以及异常处理的方法,可以使代码更为简洁
- JUnit最佳实践
- JUnit最佳实践
- JUnit最佳实践
- JUnit最佳实践
- JUnit最佳实践
- JUnit 最佳实践
- JUnit 最佳实践
- JUnit最佳实践
- junit最佳实践
- Junit 最佳实践
- JUnit最佳实践
- 使用Junit的最佳实践
- junit实践
- JUnit实践
- JUnit最佳实现
- 最佳实践
- 最佳实践
- 最佳实践
- STL heap堆
- [LeetCode] Add Two Numbers
- 画UML类图
- firefly框架分析之netconnect package(四)
- JS动态操作表格
- JUnit最佳实践
- 进程间通讯方法总结
- poj 2182||hdu 2711
- Unity里面应尽量避免使用foreach
- UVAlive 6151 Beehives 解题报告
- hdu 1392求凸包(即求包围所有树的最短距离)
- 多线程题 3个线程各打印一种字母,按顺序打印若干次ABC 的2种实现
- Google V8 JavaScript应用测试实例
- SystemTap----初始化和遍历数组