记住这句口头禅:Keep the bar green to keep the code clean.
“单元测试并不是为了证明您是对的,而是为了证明您没有错误。”
单元测试主要是用来判断程序的执行结果与自己期望的结果是否一致。
使用JUnit的最佳实践:
1).新建一个名为test的source folder,用于存放测试类源代码;
2).目标类与测试类应该位于同一个包下面,这样测试类中就不必导入源代码所在的包,因为它们位于同一个包下面;
3).测试类的命名规则:假如目标类是Calculator,那么测试类应该命名为TestCalculator或者是CalculatorTest.
在Eclipse导入JUnit
选择要导入JUnit插件的工程名(假设工程名是junit)—>选择“Build Path”—>选择“Configure Build Path...”—>选择"Libraries"选项卡—>单击右边的“Add Library”按钮—>选中“JUnit”—>单击“Next”—>在“JUnit library version”一栏右边选择自己使用的JUnit版本,在这我选择JUnit 3—>单击“Finish”即可。如图所示:
可以看见两个Source folder以及导入了JUnit 3的插件,
两个Source folder分别是一个目标类(src)与一个测试类(test)
定义一个测试用例(test case)的步骤:
1).实现TestCase的一个子类;
2).定义成员变量用来存储一些状态;
3).重写setUp()方法来初始化状态信息;
4).当一个测试运行完毕之后,我们可以重写tearDown()方法执行清理工作。
在JUnit 3.8中,测试方法需要满足如下原则:
1).测试方法必须是public的;
2).测试方法不应该返回任何值,应该是void的;
3)测试方法不应该包含任何参数,也就是说方法括号中无参数;
4).测试方法名称必须以test开头。
以下是测试用例的一个简单示例:
一个简单的测试用例的例子
关于setUp()方法与tearDown()方法说明:
在每一个测试用例执行之前,setUp()方法会执行一次;在每一个测试用例执行之后,tearDown()方法会执行一次。
Assert类中的fail()方法使用说明:将fail()方法放在程序不可能执行到的地方。
在main()方法测试JUnit的写法有三种(在需要测试的目标类里面写main()方法):
1).命令行运行的写法:junit.textui.TestRunner.run(TestCalculator.class);
2).AWT运行的写法:junit.awtui.TestRunner.run(TestCalculator.class);
3).Swing运行的写法:junit.swingui.TestRunner.run(TestCalculator.class);
在测试类的私有方法时,可以采取两种方式:
1)修改方法的访问修饰符,将private修改为default或public(但不推荐采用这种方式);
2).使用反射(reflect)在测试类中调用目标类的private方法(推荐)。如图所示:
使用反射(reflect)测试类的私有方法
利用Eclipse自动生成需要测试的类的步骤:
首先选择你需要测试的类—>单击鼠标右键选择“New”—>“JUnit Test Case”选项—>弹出“New JUnit Test Case”对话框,设置好后—>单击“Next”按钮—>选择你要测试当前的哪些方法,设置好后,单击“Finish”按钮。
Test Suite(测试套件):可以将多个测试组合到一起,同时执行多个测试。RepeatedTest类指的是测试指定类中的方法,需要重复执行多少次。TestSuite和RepeatedTest的用法,如图所示:
TestSuite和RepeatedTest的用法