JUnit是一个开放源代码的Java测试框架:
1、用于测试期望结果的断言(Assertion);
2、用于共享共同测试数据的测试工具;
3、用于方便的组织和运行测试的测试套件;
4、图形和文本的测试运行器。
安装:
先下载一个最新的zip包,下载完以后解压到你喜欢的目录下。假设是JUNIT_HOME,然后 将JUNIT_HOME下的junit.jar包加到你的系统的CLASSPATH环境变量中,对于IDE环境,对于需要用 到的junit的项目增加到lib中,其设置不同的IDE有不同的设置。
注意:
1、如果JUnit报告了测试没有成功,它会区分失败(failures)和错误(errors)。失败是你的代码中的 assert方法失败引起的;而错误则是代码异常引起的,例如ArrayIndexOutOfBoundsException。
2、在实际的测试中我们测试某个类的功能时常常需要执行一些共同的操作,完成以后需要销毁所占用的资 源(例如网络连接、数据库连接,关闭打开的文件等)。TestCase类给我们提供了setUp方法和 tearDown方法。
(1)setUp方法的内容在测试你编写的TestCase子类的每个testXxxx方法之前都会运行。
(2)tearDown方法的内容在每个testXxxx方法结束以后都会执行。这个既共享了初始化代码,又消除了各个 测试代码之间可能产生的相互影响。
编写测试代码的技巧和实践方法:
1. 不要用TestCase的构造函数初始化Fixture,而要用setUp()和tearDown()方法。
2. 不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。所以不同的平台会按不同的顺 序从Vector中取出测试方法。
3. 避免编写有副作用的TestCase。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易 数据。简单的回滚就可以了。
4. 当继承一个测试类时,记得调用父类的setUp()和tearDown()方法。
5. 将测试代码和工作代码放在一起,一边同步编译和更新。(使用Ant中有支持junit的task.)
6. 测试类和测试方法应该有一致的命名方案。如在工作类名前加上test从而形成测试类名。
7. 确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。
8. 如果你编写的软件面向国际市场,编写测试时要考虑国际化的因素。不要仅用母语的Locale进行测试。
9. 尽可能地利用JUnit提供地assert/fail方法以及异常处理的方法,可以使代码更为简洁。
10.测试要尽可能地小,执行速度快。
11.不要硬性规定数据文件的路径。
12.利用Junit 的自动异常处理书写简洁的测试代码。事实上在Junit 中使用try-catch 来捕获异常是没有必 要的,Junit 会自动捕获异常。那些没有被捕获的异常就被当成错误处理。
13. 充分利用Junit 的assert/fail 方法:
assertSame()用来测试两个引用是否指向同一个对象;
assertEquals()用来测试两个对象是否相等。
14. 确保测试代码与时间无关。
15. 使用文档生成器做测试文档。
JUnit和ant结合:
ant 提供了两个 target : junit 和 junitreport 运行所有测试用例,并生成 html 格式的报表,具体操作 如下:
1.将 junit.jar 放在 ANT_HOMElib 目录下;
2.修改 build.xml ,加入如下 内容:
-------------- One or more tests failed, check the report for detail... -----------------------------
运行 这个 target ,ant 会运行每个 TestCase,在 report 目录下就有了 很多 TEST*.xml 和 一些 网页打开 report 目录下的 index.html 就可以看到很直观的测试运行报告,一目了然。
使用帮助:
junit3.x
我们通常使用junit 3.8。
(1)、使用junit3.x版本进行单元测试时,测试类必须要继承于TestCase父类;
(2)、测试方法需要遵循的原则:
A、public的;
B、void的;
C、无方法参数;
D、方法名称必须以test开头。
(3)、不同的Test Case之间一定要保持完全的独立性,不能有任何的关联。
(4)、我们要掌握好测试方法的顺序,不能依赖于测试方法自己的执行顺序。
junit4.x
(1)、使用junit4.x版本进行单元测试时,不用测试类继承TestCase父类,因为,junit4.x全面引入了 Annotation来执行我们编写的测试。
(2)、junit4.x版本,引用了注解的方式,进行单元测试;
(3)、junit4.x版本我们常用的注解:
A、@Before 注解:与junit3.x中的setUp()方法功能一样,在每个测试方法之前执行;
B、@After 注解:与junit3.x中的tearDown()方法功能一样,在每个测试方法之后执行;
C、@BeforeClass 注解:在所有方法执行之前执行;
D、@AfterClass 注解:在所有方法执行之后执行;
E、@Test(timeout = xxx) 注解:设置当前测试方法在一定时间内运行完,否则返回错误;
F、@Test(expected = Exception.class) 注解:设置被测试的方法是否有异常抛出。抛出异常类型为 :Exception.class;
G、@Ignore 注解:注释掉一个测试方法或一个类,被注释的方法或类,不会被执行。