• JUnit单元测试入门(三)--JUnit简单实例


    JUnit单元测试入门(三)--JUnit简单实例

    我们以一个简单的+-x÷计算为例,使用JUnit做一个简单的单元测试实例

    我们实现一个简单的计算

    注:目标类和测试类要放在同一包下, 这是JUnit单元测试基础要点

    首先创建一个目标类(被测试对象):命名为Calculator.java

    package com.junit3_8;  
     
    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.junit3_8;  
    
    import junit.framework.Assert;  
    import junit.framework.TestCase;  
      
    //测试类要继承TestCase   
    public class CalculatorTest extends TestCase{  
          
        Calculator cal;  
          
        //在“每个”测试方法执行之前被调用   
        public void setUp()  
        {  
            //这段代码在这写比较方便,只写一次就够,   
            //不用在每个方法里写,因为这个方法每次都被调用,生成不同的对象,供测试方法使用   
            cal = new Calculator();  
            //System.out.println("setUp");   
        }  
          
        //在“每个”测试方法执行之后被调用   
        public void tearDown()  
        {  
            //System.out.println("testDown");   
        }  
          
        //测试方法:方法名要以test为开头,无参数,无返回类型   
        public void testAdd()  
        {  
            //Calculator cal = new Calculator();   
            int result = cal.add(1, 2);  
            //第一个参数是预期结果,第二个参数是实际结果  
            Assert.assertEquals(3, result);  
              
        }  
          
        public void testSubtract()  
        {  
            //Calculator cal = new Calculator();   
            int result = cal.subtract(1, 2);  
            //第一个参数是预期结果,第二个参数是实际结果    
            Assert.assertEquals(-1, result);  
              
        }  
          
        public void testMultiply()  
        {  
            //Calculator cal = new Calculator();   
            int result = cal.multiply(1, 2);  
            //第一个参数是预期结果,第二个参数是实际结果  
            Assert.assertEquals(2, result);  
              
        }  
          
        public void testDivide()  
        {  
            int result = 0;  
            //Calculator cal = new Calculator();   
            try   
            {  
                result = cal.divide(4, 2);  
                  
            }  
            catch(Exception e)  
            {  
                e.printStackTrace();  
                //让测试失败   
                Assert.fail();  
            }  
            //第一个参数是预期结果,第二个参数是实际结果   
            Assert.assertEquals(2, result);  
             
        }  
          
        //除数为0的情况   
        public void testDivideByZero()  
        {  
            Throwable th = null ;  
              
            //Calculator cal = new Calculator();   
            try   
            {  
                cal.divide(1, 0);  
                Assert.fail();  
            }  
            catch(Exception e)  
            {  
                th = e ;  
                //e.printStackTrace();   
            }  
              
            //th 不为空 null   
            Assert.assertNotNull(th);  
            //第一个参数是预期的,第二个参数是真实的   
             Assert.assertEquals(Exception.class, th.getClass());  
            Assert.assertEquals("除数不能为0", th.getMessage());  
              
        }  
          
        //加了这个main方法,可以直接以 Java Application 方式运行 ,也可以通过 JUnit Test 运行   
        public static void main(String[] args)  
        {  
    	//实现接口TestListener的JUnit中就含有:junit.awtui.TestRunner、junit.swingui. TestRunner、junit.ui.TestRunner等,甚至客户用自己的类实现TestListener,从而达到多样化的目的。 
    
            //命令行形式打印   
            junit.textui.TestRunner.run(CalculatorTest.class);    //它会自动运行CalculatorTest类中以test打头的所有测试用例方法  
              
            //awt 界面方式显示   
            //junit.awtui.TestRunner.run(CalculatorTest.class);   
              
            //swing 界面方式显示   
            //junit.swingui.TestRunner.run(CalculatorTest.class);   
        }  
      
    }  
    

     首先需要继承TestCase这个JUnit提供的类,然后就写一个带参数的构造方法,接着覆盖setUp(),teardown()这两个方法,然后自己写下void型而且不带参数的testXXX()方法对类别里面的逻辑方法进行测试。testXXX()后面的XXX值得是我要测试的方法的名字,比如说我要测试String类里面的equals方法,其相应的测试类名为TestString,测试方法为public void testEquals();setup()方法进行初始化工作,tearDown()进行销毁工作。

    PS:本例中只对+-x÷计算设计了基本的测试方法,并未对目标类进行全面的测试,实际的测试中应该对目标类中的方法进行全面的测试,

    例如,对+方法的测试,除了基本的两数相加,也许还应该设计:

    1)如果传入两个浮点型参数进行add运算,

    2)由于int型的范围是 -2147483648 ——2147483647,那么我们也可以设计传入int型数值的最大值2147483647与1,他们相加会出现什么情况,是等于2147483648吗? 这里告诉你,不是的,其实两者相加等于-2147483648,为什么是这样,留给大家自己研究。

    3)还有许多的情景需要测试......
     

  • 相关阅读:
    鼠标事件:
    各种坑记录
    Go学习笔记
    Scala学习笔记-7-代码片段
    Go学习笔记
    NIO学习笔记
    Redis常用操作
    docker & k8s 笔记
    Node常用笔记
    Maven常用笔记
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3002663.html
Copyright © 2020-2023  润新知