junit 单元测试 - 参数化测试

Posted 沙中世界

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了junit 单元测试 - 参数化测试相关的知识,希望对你有一定的参考价值。

junit4.x版本需要引入如下jar包:

hamcrest-core-1.3.jar

junit-4.12-beta-3.jar

新建一个计算器类,如下:

package com.pt;

public class Calculate {
    /**
     * 加法
     * @param d1
     * @param d2
     * @return
     */
    public static double add(double d1,double d2){
        return d1 + d2;
    }
    
    /**
     * 减法
     * @param d1
     * @param d2
     * @return
     */
    public static double diff(double d1,double d2){
        return d1 - d2;
    }
    
    /**
     * 乘法
     * @param d1
     * @param d2
     * @return
     */
    public static double muti(double d1,double d2){
        return d1 * d2;
    }
    
    /**
     * 除法
     * @param d1
     * @param d2
     * @return
     */
    public static double devide(double d1,double d2){
        return d1 / d2;
    }
}
Calculate.java

新建一个Source Folder文件夹(注意:不是folder文件夹)

新建一个JUnit Test Case 类(注意:不是他普通的类)

 1 package com.pt;
 2 
 3 
 4 import java.util.Arrays;
 5 import java.util.Collection;
 6 
 7 import org.junit.After;
 8 import org.junit.Before;
 9 import org.junit.Test;
10 import org.junit.runner.RunWith;
11 import org.junit.runners.Parameterized;
12 import org.junit.runners.Parameterized.Parameters;
13 
14 @RunWith(Parameterized.class)    //指定Runner 参数化测试的时候需要此注解
15 public class TestCalculate {
16     private long input1;
17     private long input2;
18     
19     
20     /**
21      * 构造函数
22      * @param in_1
23      * @param in_2
24      */
25     public TestCalculate(long in_1, long in_2){
26         this.input1 = in_1;
27         this.input2 = in_2;
28     }
29     
30     @Before            //每个测试函数执行前 都执行 setUp不可以是static
31     //@BeforeClass    //测试前只执行一次 setUp必须是static
32     public void setUp(){
33         System.out.println("开始测试之前~~~~~~~~~");
34     }
35     
36     @After            //每个测试函数执行后 都执行 tearDown不可以是static
37     //@AfterClass        //测试结束后只执行一次  tearDown必须是static
38     public void tearDown(){
39         System.out.println("开始完成之后~~~~~~~~~");
40     }
41     
42     //参数化测试 测试数据
43     @Parameters
44     public static Collection preData(){
45         //必须定义成 定义成long就会报错,在执行构造函数的时候
46         Object[][] data = new Object[][]{{1,2},{2,3},{4,5}};
47         return Arrays.asList(data);        //将数组转化成集合
48     }
49     
50     
51     @Test
52     public void testAdd(){
53         double result_add = Calculate.add(input1, input2);
54         System.out.println("addesult: " + result_add);
55         //断言  如果与期望值3 不一样,就会包异常
56         //Assert.assertEquals("加法计算错误", (long)3, (long)result_add);
57         System.out.println("测试add方法:" + input1 + " + " + input2 + " = " + result_add);
58     }
59     
60     @Test
61     public void testDiff(){
62         Calculate.diff(1, 2);
63         System.out.println("测试diff方法");
64     }
65     
66     @Test
67     public void testMuti(){
68         Calculate.diff(1, 2);
69         System.out.println("测试muti方法");
70     }
71     
72     //如果运行时间超过300ms就会报异常
73     @Test(timeout=300)
74     public void testDevide(){
75         try{
76             Thread.sleep(298);
77         }catch(Exception ex){
78             
79         }
80         Calculate.diff(1, 2);
81         System.out.println("测试devide方法");
82     }
83 }
TestCalculate.java

OK;

右键 -> Run As ->JUnit Test

以上是关于junit 单元测试 - 参数化测试的主要内容,如果未能解决你的问题,请参考以下文章

第284天学习打卡(知识点回顾 springboot Junit5 参数化测试特性)

搞定Junit单元测试{非专业}

Java单元测试工具:JUnit4

是否可以使用 Spring ApplicationContext 中的 bean 参数化 JUnit Jupiter 测试?

Springboot集成JUnit5优雅进行单元测试

SpringBoot2---单元测试(Junit5)