素材巴巴 > 程序开发 >

自动化测试之idea gradle JUnit的使用(参数化测试与非参数化测试)

程序开发 2023-09-12 12:30:46

本次博客更新的是,上次使用eclise+JUint测试完,想用idea进行测试,同时maven项目已经学习过了,想学习新的知识为前提。

知识储备,

Gradle是什么
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基于XML的各种繁琐配置

如需更多理解,推荐博客https://www.cnblogs.com/Bonker/p/5619458.html

我的理解就是类似于Maven这样子的一个包管理工具,然后导入的时候,用的不是pom文件,然后可以支持从maven库里面直接拉代码

新的东西肯定需要新的配置,mac配置有空写,windows配置一大堆,百度找,不是重点。

正文

测试题目如下

请依据提供的程序(改成java程序),采用逻辑覆盖进行白盒测试用例设计(Z路径覆盖)。 Int main(int argc, _TCHAR * argv[])
 {int x,y;scanf( “%d%d”,&x&y);if (x>10&&y>10 ){ 
 int i=1;if(x>y){while( (x*i) %y!=0 )i++;printf(“%d n ”,x*i);
 }
 else{while( (y*i) %x!=0 )i++;printf(“%d n ”,y*i);
 }
 } 
 return 0;
 }
 

代码分析:没啥好分析的,if语句里面,套了一个if语句,然后在判定条件进行循环

流程图:
在这里插入图片描述
分析逻辑:
前提是知道白盒测试的几种覆盖逻辑,推荐博客如下
https://blog.csdn.net/write6/article/details/78702977
在这里插入图片描述

在这里插入图片描述
如下:
在这里插入图片描述
开始写测试用例:
先搭建一个gradle项目,在这里插入图片描述
在这里插入图片描述
这几个选中为,采用自动导入,使用本地的gradle库,用的Jdk1.8
在这里插入图片描述
点了next就会生成一个gradle,同时默认添加Junit依赖,同时会生成对应的Test文件夹,选中测试类,和上一篇文章一样,可以直接生成在Test文件夹里面的测试类。

然后,按照要求改为Java代码,如下

public int baihe(int x, int y) {if (x > 10 && y > 10) {int i = 1;if (x > y) {while ((x * i) % y != 0)i++;System.out.println(x * i);return x*i;//printf(“%d n ”,x*i);} else {while ((y * i) % x != 0)i++;System.out.println(y * i);return y * i;//printf(“%d n ”,y*i);}}return 0;}
 

下面的测试代码就针对着这么一个函数进行测试就行。

非参数化测试
非参数化测试就是,一个一个输入测试用例,一个一个给x,y进行赋值,和上一篇文章一样,不多说,直接贴代码

package com.company;import org.junit.Test;import static org.junit.Assert.*;
 //非参数化测试
 public class MainTest {Main main = new Main();@Testpublic void baihe0() {int result = main.baihe(12,11);assertEquals(132,result);}@Testpublic void baihe1() {int result = main.baihe(10,10);assertEquals(0,result);}@Testpublic void baihe2() {int result = main.baihe(11,11);assertEquals(11,result);}@Testpublic void baihe3() {int result = main.baihe(24,12);assertEquals(24,result);}@Testpublic void baihe4() {int result = main.baihe(11,12);assertEquals(132,result);}@Testpublic void baihe5() {int result = main.baihe(12,10);assertEquals(0,result);}@Testpublic void baihe6() {int result = main.baihe(10,12);assertEquals(0,result);}@Testpublic void baihe7() {int result = main.baihe(10,10);assertEquals(0,result);}@Testpublic void baihe8() {int result = main.baihe(24,12);assertEquals(24,result);}@Testpublic void baihe9() {int result = main.baihe(11,12);assertEquals(132,result);}@Testpublic void baihe10() {int result = main.baihe(12,24);assertEquals(24,result);}@Testpublic void baihe11() {int result = main.baihe(10,10);assertEquals(0,result);}@Testpublic void baihe12() {int result = main.baihe(12,11);assertEquals(132,result);}@Testpublic void baihe13() {int result = main.baihe(11,12);assertEquals(132,result);}@Testpublic void baihe14() {int result = main.baihe(24,12);assertEquals(24,result);}@Testpublic void baihe15() {int result = main.baihe(12,24);assertEquals(24,result);}}
 

参数化测试
@RunWith, 当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解所指明的运行器(runner)来运行测试,而不是JUnit默认的运行器。

要进行参数化测试,需要在类上面指定如下的运行器:
  @RunWith (Parameterized.class)

然后,在提供数据的方法上加上一个@Parameters注解,这个方法必须是静态static的,并且返回一个集合Collection。

在测试类的构造方法中为各个参数赋值,(构造方法是由JUnit调用的),最后编写测试类,它会根据参数的组数来运行测试多次。

注意:必须要为类的所有字段赋值,不管你是不是都用到!否则,Junit会出错。

package com.company;import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;import static org.junit.Assert.*;
 //参数化测试
 //@RunWith, 当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解所指明的运行器(runner)来运行测试,而不是JUnit默认的运行器
 @RunWith(Parameterized.class)//
 public class MainTest2 {private Main main = new Main();private int param;private int result;private int x;private int y;private int expect;//这里的注解是添加参数@Parameterized.Parameterspublic static Collection data(){Object [][] object = {{12,11,132},{11,12,132},//语句覆盖{12,11,132},{11,12,132},{11,11,11},//判定覆盖{12,11,132},{10,10,0},{11,12,132},{11,11,11},{24,12,24},//条件覆盖{12,11,132},{10,10,0},{11,11,11},{24,12,24}, {11,12,132},//判定条件覆盖{12,11,132},{12,10,0},{10,12,0},{10,10,0},{24,12,24},{11,12,132},{12,24,24},//条件组合覆盖{10,10,0},{12,11,132},{11,12,132},{24,12,24},{12,24,24}//路径覆盖};return Arrays.asList(object);}public  MainTest2(int x,int y,int expect){this.x = x;this.y = y;this.expect = expect;}@Testpublic void baihe1(){int result = main.baihe(x,y);Assert.assertEquals(expect, result);}}
 

测试代码写完了以后,选中非参数化测试和参数化测试,run一下这俩个测试类,可以发现,测试都通过了,下面是截图。

非参数化测试:
在这里插入图片描述
参数化测试:
在这里插入图片描述

参考了很多前辈的文档这才把这么简单的东西做出来,感谢曾经的前行者。下面是部分参考的博客

https://www.cnblogs.com/byron0918/p/4801152.html

https://www.cnblogs.com/Bonker/p/5619458.html

https://www.cnblogs.com/xingyunblog/p/10428178.html

ps:同时感谢小赵同学的合作。


标签:

素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。