zoukankan      html  css  js  c++  java
  • 【助教】关于单元测试(二)

    故事还在继续......

    小张童鞋写的程序一直未报bug,这激发了他继续编程的兴趣,于是乎,他又写了个除法程序,说到除法,就不得不考虑的一种情况:

    除数为零怎么办?
    答:抛出异常。

    所以,小张童鞋要解决两个问题:

    • 除数为零应该抛出什么异常?(让小李有思想准备来处理这种异常)
    • 用单元测试怎么测试这种异常?

    为了解决第一个问题:

    小张先写了一个最简单的版本:

    package com.hui.demo;
    
    public class Core {
    	public int divide(int a, int b) {
    		return a/b;
    	}
    }
    

    想知道想知道报什么异常,调用一下就知道了,于是他写了一个main方法来调用他的除法程序,而且刻意让除数为零,观察Eclipse下报了什么错。

    import com.hui.demo.Core;
    
    public class T {
    	public static void main(String[] args) {
    		Core core = new Core();
    		core.divide(3, 0);
    	}
    }
    
    

    运行一下发现控制台报错:

    Exception in thread "main" java.lang.ArithmeticException: / by zero
    	at com.hui.demo.Core.divide(Core.java:5)
    	at T.main(T.java:6)
    

    所以第一个问题的答案是:java.lang.ArithmeticException
    PS:关于这个异常,无论你百度谷歌必应搜狗,你都可以找到这个异常的意思是什么,即便是英文版的java的API:
    http://docs.oracle.com/javase/8/docs/api/index.html
    中对这个异常的英文描述,相信你都可以看得懂:

    **Thrown when an exceptional arithmetic condition has occurred. For example, an integer "divide by zero" throws an instance of this class. **

    所以,小张自热而然的把自己的程序处理成这样:

    package com.hui.demo;
    
    public class Core {
    	public int divide(int a, int b) {
    		if (0 == b) {
    			// 除数为零,抛出异常
    			throw new ArithmeticException();
    		}
    		return a/b;
    	}
    }
    

    我们来解决第二个问题:
    说到单元测试的情况,我们依然可以借用之前说的那句话:

    // 我想测 一测:
    // 参数传入
    // 我的待测方法里面,
    // 得出的结果会不会是:我期待的结果

    // 我想测 一测:
    // 0作为除数传入
    // 我的除法方法里面,
    // 得出的结果会不会是:抛出 java.lang.ArithmeticException异常

    按照上一篇的方法建立单元测试:

    package com.hui.demo.test;
    
    import static org.junit.Assert.assertEquals;
    import org.junit.Test;
    import com.hui.demo.Core;
    
    public class CoreTest {
            
            @Test
    	public void testDivide() {
    		Core core = new Core();
    		int result = core.divide(3, 2);
    		assertEquals(1, result);
    	}
    	
            @Test(expected=ArithmeticException.class)
    	public void testDivideZero()  {
    		Core core = new Core();
    		core.divide(2, 0);
    	}
    }
    

    这里重点看这句:

    (expected=ArithmeticException.class)
    

    的意思就是说:当我除数为0时候,我期待程序结果是:

    抛出 ArithmeticException异常

    运行这个测试方法,显示绿色条,这种情况测试通过。

    小张开开心心的把写好的的除法程序给小李用,没想到,"噩梦"才刚刚开始......

  • 相关阅读:
    C# 基础笔记
    ASP.Net Jquery 随机验证码 文本框判断
    html 随机验证码
    冒泡排序
    工厂方法模式[Factory Mothod]
    单例设计模式[Singleton]
    设计模式之SOLID原则
    linux下配置zookeeper
    linux中安装nginx
    linux安装tomcat
  • 原文地址:https://www.cnblogs.com/greyzeng/p/4443160.html
Copyright © 2011-2022 走看看