zoukankan      html  css  js  c++  java
  • Junit4使用(并使用参数化测试)

    如果是基于Eclipse使用Junit,在现在的Eclipse版本中都已经集成了Junit,可以根据自身的需求自由使用Junit3或者Junit4。在本文中主要通过测试简单算术程序(加,减,乘,除)来介绍Junit4的使用,并引入一个简单的案例进行讲解。

    代码地址:https://github.com/ithinker1991/TestCourse

    Step 1: 写出基本的算术代码Calculate.java

    package com.ysc.main;
    
    public class Calculate {
        public static int add(int a, int b) {
            return a + b;
        }
    
        public static int minus(int a, int b) {
            return a - b;
        }
    
        public static int divide(int a, int b) throws Exception {
            if (b == 0) {
                throw new Exception("除数不能为0");
            }
            return a / b;
        }
    
        public static int multiply(int a, int b) {
            return a * b;
        }
    }

    Step 2: 对Calculate类添加Junit4的测试单元,右键->new->JUnit Test Case,如下图

    image

    Step 3: 对添加的测试用例进行配置,命名为TestCalculate,点击Nextimage

    Step 4: 选择需要测试的函数,点击Finish,完成JUnit的基本配置

    image

    Step 5: 在经过上面的步骤之后,就可以得到配置好的测试用例

    package com.ysc.main;
    
    import static org.junit.Assert.*;
    
    import org.junit.Before;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    public class CalculateTest {
    
        @BeforeClass
        public static void setUpBeforeClass() throws Exception {
        }
    
        @Before
        public void setUp() throws Exception {
        }
    
        @Test
        public void testAdd() {
            fail("Not yet implemented");
        }
    
        @Test
        public void testMinus() {
            fail("Not yet implemented");
        }
    
        @Test
        public void testDivide() {
            fail("Not yet implemented");
        }
    
        @Test
        public void testMultiply() {
            fail("Not yet implemented");
        }
    
    }

    Step 6: 现在需要做的就是添加上需要测试的数据

    package com.ysc.main;
    
    import static org.junit.Assert.*;
    
    import org.junit.Before;
    import org.junit.BeforeClass;
    import org.junit.Test;
    
    public class CalculateTest {
    
        @BeforeClass
        public static void setUpBeforeClass() throws Exception {
        }
    
        @Before
        public void setUp() throws Exception {
        }
    
        @Test
        public void testAdd() {
            assertEquals(5, Calculate.add(1, 4));
        }
    
        @Test
        public void testMinus() {
            assertEquals(-1, Calculate.minus(2, 3));
        }
    
        @Test
        public void testDivide() throws Exception {
            assertEquals(0, Calculate.divide(1, 4));
        }
    
        @Test
        public void testMultiply() {
            assertEquals(4, Calculate.multiply(1, 4));
        }
    
    }

    Step 7: 开始进行测试,右键->Run as->JUnit Test

    image

    由于添加的数据都是正常运行的数据,所有用例都测试正常

    image

    Step 6: 单纯一组测试参数肯定不足以确认代码已经达到了预期标准,应该对所有输入进行等价类划分,进行参数化测试。在此例中只对add函数进行参数化测试。

      左值 右值 预期结果
    case 1 1 1 2
    case 2 -1 -1 -2
    case 3 1 -1 0
    case 4   1 -2147483648
    case 5 -2147483648 -1 2147483647

    修改TestCalculate,注意在类上方需要加注解 @RunWith(Parameterized.class)

    package com.ysc.main;
    
    import static org.junit.Assert.assertEquals;
    
    import java.util.Arrays;
    import java.util.Collection;
    
    import org.junit.Before;
    import org.junit.BeforeClass;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runners.Parameterized;
    import org.junit.runners.Parameterized.Parameters;
    
    @RunWith(Parameterized.class)
    public class CalculateTest {
    
        @Parameters
        public static Collection data() {
            return Arrays.asList(new Object[][] {
                    { 1, 1, 2 }, 
                    { -1, -1, -2 },
                    { -1, 1, 0 }, 
                    { 2147483647, 1, -2147483647 },
                    { -2147483648, -1, 2147483647 }
            });
        }
        
        private int leftVal;
        private int rightVal;
        private int expectedVal;
    
        public CalculateTest(int leftVal, int rightVal, int expectedVal) {
            super();
            this.leftVal = leftVal;
            this.rightVal = rightVal;
            this.expectedVal = expectedVal;
        }
    }

    所有测试用例通过测试,如下图

    image

    代码地址:https://github.com/ithinker1991/TestCourse

  • 相关阅读:
    团队作业(二):项目选题
    2019-2020-2 20175312 陶光远《网络对抗技术》 Exp9 Web安全基础
    2019-2020-2 20175312 陶光远《网络对抗技术》 Exp8 Web基础
    2019-2020-2 20175312 陶光远《网络对抗技术》 Exp7 网络欺诈防范
    2019-2020-2 20175312 陶光远《网络对抗技术》 Exp6 MSF基础应用
    2019-2020-2 20175312 陶光远《网络对抗技术》 Exp5 信息搜集与漏洞扫描
    2019-2020-2 20175312 陶光远《网络对抗技术》Exp4 恶意代码分析
    2019-2020-2 20175312 陶光远《网络对抗技术》Exp3 免杀原理与实践
    2019-2020-2 20175312 陶光远《网络对抗技术》Exp2 后门原理与实践
    2019-2020-2 20175312 陶光远《网络对抗技术》Exp1 PC平台逆向破解
  • 原文地址:https://www.cnblogs.com/ishu/p/4527360.html
Copyright © 2011-2022 走看看