JUnit3 结合一个除法的单元测试说明Assert.fail()的用法
2015-08-22 09:45
441 查看
之前一篇博文(JUnit基础及第一个单元测试实例(JUnit3.8))介绍了用JUnit做单元测试的基本方法,并写了一个简单的类Calculator,其中包含了整型加减乘除的简单算法。
本文通过完善其中的除法和除法的单元测试来继续说明JUnit的用法。
首先完善Calculator类中的除法,在除数为零的情况下抛出一个异常:
首先是测试正常情况的测试用例:
测试异常情况的测试用例:
此代码中故意将除数改为2,测试失败。
除数为2时的执行情况:
总结:Assert.fail()加在期望中不可能到达的地方,一旦到达,表明测试失败,结果与预期不同。
测试类:
本文通过完善其中的除法和除法的单元测试来继续说明JUnit的用法。
首先完善Calculator类中的除法,在除数为零的情况下抛出一个异常:
public int divide(int a, int b) throws Exception { if(0 == b) { throw new Exception("除数不能为0"); } return a / b; }
设计测试用例:
测试用例中不再抛出异常,而是使用try catch块。首先是测试正常情况的测试用例:
public void testDivide() { int result = 0; try { result = calculator.divide(12, 3); } catch (Exception e) { e.printStackTrace(); // 如果抛出异常,证明测试失败,没有通过,没通过的测试计数在Failures中 Assert.fail(); // 如果不加这一行,如果程序进入到catch,无法判断其失败 } // 判断方法的返回结果 Assert.assertEquals(4, result);// 第一个参数是期望值,第二个参数是要验证的值 }
测试异常情况的测试用例:
public void testDivideByZero() { Throwable tx = null; int result = 0; try { result = calculator.divide(12, 2); Assert.fail("没有抛出异常,测试失败");// 如果执行到这行代码,则证明没有抛出异常,说明我们的验证失败 } catch (Exception e) { e.printStackTrace(); tx = e; } Assert.assertEquals(Exception.class, tx.getClass());// 抛出的异常类型是否和期望一致 Assert.assertEquals("除数不能为0", tx.getMessage());// 抛出的异常信息是否和期望一致 //如果上面两个都通过,则测试通过 }
此代码中故意将除数改为2,测试失败。
除数为2时的执行情况:
总结:Assert.fail()加在期望中不可能到达的地方,一旦到达,表明测试失败,结果与预期不同。
附上完整代码:
目标类:Calculator.java package com.mengdd.junit; public class Calculator { public int add(int a, int b) { return a + b; } public int subtract(int a, int b) { return a - b; } public int multiply(int a, int b) { return a * b; } public int divide(int a, int b) throws Exception { if(0 == b) { throw new Exception("除数不能为0"); } return a / b; } }
测试类:
CalculatorTest.java package com.mengdd.junit; import junit.framework.Assert; import junit.framework.TestCase; public class CalculatorTest extends TestCase { private Calculator calculator = null; @Override public void setUp() throws Exception { System.out.println("set up"); // 生成成员变量的实例 calculator = new Calculator(); System.out.println(calculator); } @Override public void tearDown() throws Exception { System.out.println("tear down"); } public void testAdd() { int result = calculator.add(1, 2); // 判断方法的返回结果 Assert.assertEquals(3, result);// 第一个参数是期望值,第二个参数是要验证的值 } public void testSubtract() { int result = calculator.subtract(1, 2); // 判断方法的返回结果 Assert.assertEquals(-1, result);// 第一个参数是期望值,第二个参数是要验证的值 } public void testMultiply() { int result = calculator.multiply(2, 3); // 判断方法的返回结果 Assert.assertEquals(6, result);// 第一个参数是期望值,第二个参数是要验证的值 } public void testDivide() { int result = 0; try { result = calculator.divide(12, 3); } catch (Exception e) { e.printStackTrace(); // 如果抛出异常,证明测试失败,没有通过,没通过的测试计数在Failures中 Assert.fail(); // 如果不加这一行,如果程序进入到catch,无法判断其失败 } // 判断方法的返回结果 Assert.assertEquals(4, result);// 第一个参数是期望值,第二个参数是要验证的值 } public void testDivideByZero() { Throwable tx = null; int result = 0; try { result = calculator.divide(12, 0); Assert.fail("没有抛出异常,测试失败");// 如果执行到这行代码,则证明没有抛出异常,说明我们的验证失败 } catch (Exception e) { e.printStackTrace(); tx = e; } Assert.assertEquals(Exception.class, tx.getClass());// 抛出的异常类型是否和期望一致 Assert.assertEquals("除数不能为0", tx.getMessage());// 抛出的异常信息是否和期望一致 //如果上面两个都通过,则测试通过 } }
相关文章推荐
- poj 1995 Raising Modulo Numbers 【快速幂 裸题】
- aiSee3 矢量图像文本格式 示例
- POJ 3411 Paid Roads
- LeetCode "Paint House"
- hdu 5316 Magician 2015 Multi-University Training Contest 3
- 关于pkg: /data/local/tmp/com.example.zy.deyijia Failure [INSTALL_FAILED_OLDER_SD问题
- 【LeetCode】(172)Factorial Trailing Zeroes(Easy)
- uva 11168 - Airport(凸包)
- Selenium 高阶应用之WebDriverWait 和 expected_conditions
- Selenium 高阶应用之WebDriverWait 和 expected_conditions
- 2015 Multi-University Training Contest 10 hdu 5411 CRB and Puzzle
- wget+webmin+dns+lamp+openwebmail
- hdu1021Fibonacci Again
- [杂谈]机器学习:数学、概率与人工智能
- Codeforces Gym 100338H High Speed Trains 组合数学+dp+高精度
- ip,email,银行卡号匹配
- 03-树3. Tree Traversals Again (25)将先序遍历和中序遍历转为后序遍历
- main函数的参数(一)
- USACO 2009 Feb Gold 3.Revamping Trails
- editor does not contain a main type 解决方法