写一个测试方法断言期望的结果
public void testEmptyCollection() {
Collection collection = new ArrayList();
assertTrue(collectionisEmpty());
}
注意JUnit推荐的做法是以test作为待测试的方法的开头这样这些方法可以被自动找到并被测试
写一个suite()方法它会使用反射动态的创建一个包含所有的testXxxx方法的测试套件
public static Test suite() {
return new TestSuite(SimpleTestclass);
}
写一个main()方法以文本运行器的方式方便的运行测试
public static void main(String args[]) {
junittextuiTestRunnerrun(suite());
}
}
运行测试
以文本方式运行
java junitfaqSimpleTest
通过的测试结果是
Time:
OK ( tests)
Time上的小点表示测试个数如果测试通过则显示OK否则在小点的后边标上F表示该测试失败
每次的测试结果都应该是OK的这样才能说明测试是成功的如果不成功就要马上根据提示信息进行修正了
如果JUnit报告了测试没有成功它会区分失败(failures)和错误(errors)失败是你的代码中的assert方法失败引起的而错误则是代码异常引起的例如ArrayIndexOutOfBoundsException
以图形方式运行
java junitswinguiTestRunner junitfaqSimpleTest
通过的测试结果在图形界面的绿色条部分
以上是最简单的测试样例在实际的测试中我们测试某个类的功能是常常需要执行一些共同的操作完成以后需要销毁所占用的资源(例如网络连接数据库连接关闭打开的文件等)TestCase类给我们提供了setUp方法和tearDown方法setUp方法的内容在测试你编写的TestCase子类的每个testXxxx方法之前都会运行而tearDown方法的内容在每个testXxxx方法结束以后都会执行这个既共享了初始化代码又消除了各个测试代码之间可能产生的相互影响
JUnit最佳实践
Martin Fowler说过当你试图打印输出一些信息或调试一个表达式时写一些测试代码来替代那些传统的方法一开始你会发现你总是要创建一些新的Fixture而且测试似乎使你的编程速度慢了下来然而不久之后你会发现你重复使用相同的Fixture而且新的测试通常只涉及添加一个新的测试方法
你可能会写许多测试代码但你很快就会发现你设想出的测试只有一小部分是真正有用的你所需要的测试是那些会失败的测试即那些你认为不会失败的测试或你认为应该失败却成功的测试
我们前面提到过测试是一个不会中断的过程一旦你有了一个测试你就要一直确保其正常工作以检验你所加入的新的工作代码不要每隔几天或最后才运行测试每天你都应该运行一下测试代码这种投资很小但可以确保你得到可以信赖的工作代码你的返工率降低了你会有更多的时间编写工作代码
[] [] []