注意上面的三个测试的第一行几乎是一样的,似乎可以将这个对象移到setUp()方法里。因为testAdd()方法将这个对象叫做added而其他叫 money,首先需要将added相关money以使得三个测试的第一行都一样,然后就可以将这一行移到setUp()方法里去。最后,将money从一个本地变量变成一个实例级的参数域,使得setUp()和所有的测试都可以使用它。接着看看改动后的代码:
1. public class MoneyTest extend TestCase{ 2. private Money money; 3. 4. protected void setUp()throws Exception{ 5. money = new Money(12,50); 6. } 7. 8. public void testAdd(){ 9. Money sum = added.add(augend); 10. assertEquals(2500,sum.inCents()); 11. 12. } 13. 14. public void testNegate(){ 15. Money opposite = money.negate(); 16. assertEquals(-1250,opposite.inCents()); 17. } 18. 19. public void testRound(){ 20. Money rounded = money.roundToNearestDollar(); 21. assertEquals(1300,rounder.inCents()); 22. } 23. 24. } |
上面这样的做,我们其实在数学中有个概念很好的用来说下:那就是将方程式进行变形然后提取公因式。任何东西都是可以进行检讨和讨论。
讨论:
Junit通过方法setUp()和teatDown()提供了对测试模块的支持,可以在junit.framework.TestCase中找到他们。在创建TestCase的子类的时候,可以重载这些方法来为每个测试建立或者销毁测试模块。要了解Junit是如何使用这些方法的,可以查看另一个 TestCase方法runBare()的代码:
1. public void runBare()throws Throwable{ 2. setUp(); 3. try{ 4. runTest(); 5. } 6. finally{ 7. tearDown(); 8. } 9. } |
在执行测试的时候,框架会首先调用runBare()方法来设置一个测试模块,运行测试,然后再撤销测试模块。注意将tearDown()放在finally块中,就能保证它一定被执行,即使测试失效,这个方法是为了释放资源,避免资源浪费。
推荐阅读: