博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JUnit3 结合一个除法的单元测试说明Assert.fail()的用法
阅读量:5181 次
发布时间:2019-06-13

本文共 3905 字,大约阅读时间需要 13 分钟。

  

  之前一篇博文()介绍了用JUnit做单元测试的基本方法,并写了一个简单的类Calculator,其中包含了整型加减乘除的简单算法。

  本文通过完善其中的除法和除法的单元测试来继续说明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());// 抛出的异常信息是否和期望一致                //如果上面两个都通过,则测试通过    }}

 

 

参考资料:

  圣思园张龙老师Unit Test视频。

 

转载于:https://www.cnblogs.com/mengdd/archive/2013/03/28/2987726.html

你可能感兴趣的文章
DataWindow快速从Grid格式转为Freefrom
查看>>
MySQL基础
查看>>
Luogu P3386 【模板】二分图匹配
查看>>
【驱动】第5课、TS(触摸屏)驱动之学习笔记
查看>>
今晚刚回家,给人算了一卦运气
查看>>
java xml 转 json
查看>>
七月第三周总结
查看>>
java+android学习路线图
查看>>
C语言学习笔记
查看>>
Windows设置Command命令
查看>>
Linux jdk1.7安装与 jdk1.6卸载
查看>>
virtualenvwrapper
查看>>
iconfont图标库的使用方法
查看>>
Python基础--函数的定义和调用
查看>>
最小二乘方法(线性回归)
查看>>
面试官,求求你不要问我这么简单但又刁难的算法题了
查看>>
C# 操作ini文件
查看>>
HDU 2586.How far away ?-离线LCA(Tarjan)
查看>>
循环结构(二)--->for
查看>>
(4.34)sql server窗口函数
查看>>