`

JUnit 测试建议

    博客分类:
  • Java
阅读更多

以下是对JUnit实践的一个很好的总结,信息来源于一些比较权威的JUnit书籍和网上资料。这里集合如下:

1、每次只对一个对象进行UT测试(unit-test one object at a time)。这样能使你尽快发现问题,而不被各个对象之间的复杂关系所迷惑。

2、给测试方法起个好名字(choose meaningful test method names)。应该是用形如testXXXYYY(),这样的格式来命名你的测试方法。前缀test是Junit查找测试方法的依据,XXX应该是你测试的方法名,YYY应该是你测试的状态。当然如果你只有一种状态需要测试可以直接命名为testXXX()。

3、明确写出出错原因(explain the failure reason in assert calls)。在使用assertTrue,assertFalse,assertNotNull,assertNull方法时,应该将可能的错误的描述字符串,以第一个参数传入相应的方法。这样你可以迅速的找出出错原因。

4、一个UT测试方法只应该测试一种情况(one unit test equals one testMethod)。一个方法中的多次测试,只会混乱你的测试目的。

5、测试任何可能的错误(test anything that could possibly fail)。你的测试代码不是为了证明你是对的,而是为了证明你没有错。因此对测试的范围要全面,比如边界值、正常值、错误值;对代码可能出现的问题要全面预测。

6、让你的测试帮助改善你的代码(let the test improve the code)。测试代码永远是我们代码的第一个用户,所以不仅让他帮组我们发现Bug,还要帮组我们改善我们的设计,就是有名的测试驱动开发(Test-Driven Development,TDD)。

7、一样的包,不同的位置(same package, separate directories)。测试的代码和被测试的代码应该放到不同的文件夹中,建议使用这种目录 src/java/代码 src/test/测试代码。 这样可以让两份代码使用一样的包结构,但是放在不同的目录下。

8、关于setup与teardown

a) 不要用TestCase的构造函数初始化Fixture,而要用setUp()和tearDown()方法。

b) 在setUp和tearDown中的代码不应该是与测试方法相关的,而应该是全局相关的。如:针对与测试方法都要用到的数据库链接等等。

c) 当继承一个测试类时,记得调用父类的setUp()和tearDown()方法。

9、不要在mock object中牵扯到业务逻辑(don’t write business logic in mock objects)。

10、只对可能产生错误的地方进行测试(only test what can possibly break)。如:一个类中频繁改动的函数。对于那些仅仅只含有getter/setter的类,如果是由IDE(如Eclipse)产生的,则可不测;如果是人工写,那么最好测试一下。

11、尽量不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺序从Vector中取出测试方法。

12、避免编写有副作用的TestCase,你要确信保持你的测试方法之间是独立的。

13、将测试代码和工作代码放在一起,一边同步编译和更新(使用Ant中有支持junit的task)。

14、确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。

15、如果你编写的软件面向国际市场,编写测试时要考虑国际化的因素。不要仅用母语的Locale进行测试。

16、尽可能地利用JUnit提供地assert/fail方法以及异常处理的方法,可以使代码更为简洁。

17、测试要尽可能地小,执行速度快。

原文:http://my.oschina.net/henrydong/blog/143794

4
4
分享到:
评论

相关推荐

    Junit测试 简单用例

    此实例是Junit测试的例子,有单元测试的的例子 ,例如testCase 也有综合测试的例子 例如ALLTest 里面还有一些给读者的建议

    Mockito+Junit5测试方法实践

    内容概要:参考Mockito官方API文档,实践框架每个特性。 适合人群:Mockito入门人员以及想全面...能学到什么:“Mockito 4.6.0 + Junit 5”的组合编程。 使用建议:使用前安装好Maven及Java即可,推荐使用VSCode编辑。

    Junit实战第二版

    由浅入深、由易到难地对JUnit展开了系统的讲解,包括探索JUnit的核心、软件测试原则、测试覆盖率与开发、使用stub进行粗粒度测试、使用mock objects进行测试、容器内测试、从Ant中运行JUnit测试、从Maven2中运行...

    Java编程使用Junit实现接口单元测试,快速实现接口全覆盖(建议收藏)

    资源对应https://onefire.blog.csdn.net/article/details/120736588博客,这个是一个完整的基于SpringBoot架构的Java项目,使用idea或者eclipse打开就可以使用。对零基础或小白,以及测试工程师,有很大的参考价值。

    JUnit实战 第2版 (英文版)

    由浅入深、由易到难地对JUnit展开了系统的讲解,包括探索JUnit的核心、软件测试原则、测试覆盖率与开发、使用stub进行粗粒度测试、使用mock objects进行测试、容器内测试、从Ant中运行JUnit测试、从Maven2中运行...

    Junit实战第二版 中文完整版

    由浅入深、由易到难地对JUnit展开了系统的讲解,包括探索JUnit的核心、软件测试原则、测试覆盖率与开发、使用stub进行粗粒度测试、使用mockobjects进行测试、容器内测试、从Ant中运行JUnit测试、从Maven2中运行JUnit...

    Junit实战(第2版)

    由浅入深、由易到难地对JUnit展开了系统的讲解,包括探索JUnit的核心、软件测试原则、测试覆盖率与开发、使用stub进行粗粒度测试、使用mockobjects进行测试、容器内测试、从Ant中运行JUnit测试、从Maven2中运行JUnit...

    junit 4 资料

    JUnit 是 Java 社区中知名度最高的单元测试工具。...建议分别为单元测试代码与被测试代码创建单独的目录,并保证测试代码和被测试代码使用相同的包名。这样既保证了代码的分离,同时还保证了查找的方便。

    JUnit 4:面向程序员的 Java 测试框架-开源

    (通常建议使用构建工具来构建您的软件并运行测试。)。 JUnit 特性包括用于测试预期结果的断言、用于共享公共测试数据的测试装置、用于运行测试的测试运行器。 JUnit 最初由 Erich Gamma 和 Kent Beck 编写。 ...

    dspot:自动为Junit测试用例检测并生成缺少的断言(也称为测试放大)

    DSpot是一种在JUnit测试中生成缺少断言的工具。 DSpot将带有现有测试套件的Java项目作为输入。 DSpot从现有的测试用例中生成新的测试用例,并将其写入磁盘。 DSpot支持使用Maven和Gradle构建的Java项目(请参阅--...

    embedded-ldap-junit:在您的JUnit测试中运行嵌入式LDAP服务器的JUnit规则

    一个基于出色的的用于在JUnit测试中运行嵌入式LDAP服务器。 受到启发。 为什么? 您想测试LDAP集成代码而不影响LDAP服务器 您正在使用要测试的LDAP模式更改,而无需更改共享LDAP服务器上的模式 您正在重构遗留代码...

    Embedded-db-junit:JUnit规则,用于为测试提供嵌入式内存数据库

    您正在重构遗留代码,其中JDBC调用与您的业务逻辑紧密相关,并且希望从“外部”测试遗留代码开始(如所建议) 要测试与他们正在使用maintened无论你的数据库变阵或。 状态 该库通过库分发,因此应该可以广泛使用。 ...

    HttpServletRequst的mock实现基础上的测试案例介绍

    由于采用了junit4,建议使用注解来进行测试用力的配置,而不需要用test开头的method 2.无需启动tomcat、weblogic 等服务器,速度快 3.可以很方便debug,节省人力 只需要利用测试工程的junit-debug即可,有时候可能...

    Java测试新技术TestNG和高级概念.part1

    无论您使用TestNG,JUnit或其他测试框架,本书提供的测试设计模式都会告诉您如何改进您的测试,对如何让代码和设计变得更可测试提供具体的建议。 目录: 第1章 起步 1.1 超越JUnit 3 1.2 JUnit 4 1.3 针对可测试性而...

    Java测试新技术TestNG和高级概念.part2

    无论您使用TestNG,JUnit或其他测试框架,本书提供的测试设计模式都会告诉您如何改进您的测试,对如何让代码和设计变得更可测试提供具体的建议。 目录: 第1章 起步 1.1 超越JUnit 3 1.2 JUnit 4 1.3 针对可测试性而...

    Java测试新技术TestNG和高级概念.part3

    本书主要内容包括: 展示了与测试有关的折衷考虑,这样您就能在测试...无论您使用TestNG,JUnit或其他测试框架,本书提供的测试设计模式都会告诉您如何改进您的测试,对如何让代码和设计变得更可测试提供具体的建议。

    acai:JUnit4和Guice的测试库

    阿萨伊 Acai使使用JUnit4和Guice编写应用程序的功能测试变得容易。 Acai使它变得简单: 将所需的帮助程序类注入测试启动测试所需的任何服务测试这些服务之间进行测试以正确的顺序启动多个服务以进行测试创建测试范围...

    Java测试新技术TestNG和高级概念.part4

    本书主要内容包括: 展示了与测试有关的折衷考虑,这样您就能在测试...无论您使用TestNG,JUnit或其他测试框架,本书提供的测试设计模式都会告诉您如何改进您的测试,对如何让代码和设计变得更可测试提供具体的建议。

    自动化面试题,提高测试效率、减少人力成本

    自动化测试是一种使用软件工具和脚本来执行测试任务的过程,以替代人工执行测试步骤的方式。它旨在提高测试效率、减少人力成本,并确保软件...生成测试报告,其中包括测试执行摘要、失败用例详细信息和建议的解决方案。

    ALevin配置环境所需要的基础包——JUnit

    阅读建议: ALevin作为一个很好的虚拟网络仿真平台,它的开源给我们的学习带来很大方便,但在这之前我们先要将环境配置好,才能更好的使用着个开源工具,由于ALevin要求JUnit 4.5 或更高版本, 因此为了方便大家交流...

Global site tag (gtag.js) - Google Analytics