自动化测试之idea gradle JUnit的使用(参数化测试与非参数化测试)
本次博客更新的是,上次使用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:同时感谢小赵同学的合作。
标签:
相关文章
-
无相关信息