JUint4的下载、配置及对一个算法编写单元测试用例(测试多组数据每组多个参数)
一、JUnit4 jar包下载
链接:https://pan.baidu.com/s/1AdeVGGikcY5dfL151ZnWHA
提取码:h1am
下载完成后,解压一下即可。
二、导入JUnit4 jar包
1.打开eclipse,右击你要进行单元测试的类所在的java项目,选择“Properties”选项

2.在弹出的对话框中选择“Java Build Path”----->"Add Library" 选项,进行构建JUnit4路径

3.在弹出的“Add Library”对话框中选择“JUnit”选项,单击“Next”按钮,在下拉列表中选择“JUnit4”,点击“Finish”,完成添加


4.添加完成后,单击“Apply”,应用变更,单击“OK”按钮,JUnit4构建成功,即可以使用JUnit4框架进行单元测试。

三、用JUnit4对一个算法题编写测试用例,进行测试。
1.首先来看这个算法题:

这个算法题有几个条件:
(1)要从起始点走到终点结束
(2)这个线段上的所有的点都要走一遍,但是每个点只能经过一次,
(3)在任何位置都可以用0次或多次技能跳到第一个点和第N个点(最后一个点)以达到以上两个条件
(4)三个值的范围是[1,10000] 且1<=S,T<=N
(5)用任何走法都不能达到目的则输出-1
(6)输入的参数是0或负数的时候,输出-1
(7)输入的终点T大于总点数S的时候,输出-1
(8)当N=S=T>1的时候,想要到达终点,终点所在的这个点始终要经过两遍,所以永远无法满足条件,则输出-1
(9)当N=S=T=1的时候,不用走,直接到终点,需要发动0次技能
(10)当S=1,T=N的时候,从第一个点走到最后一个点即可,也不用发动技能,所以是0次

(11)当S=1,T<N的时候,需要发动一次一次技能

(12)当终点在起始点的右侧相邻点(即T-S=1)的时候,需要发动一次技能

(13)当起始点大于1(S>1),终点小于N(T<N)的时候,也是只需发动一次技能
图同上,但两个判定条件不一样,一个是起始点和终点相邻,一个是起始点和终点在第一个点和最后一个点中间
(14)当起始点大于1(S>1),终点为N(T=N)的时候,需要发动两次技能才能到达终点

根据以上分析,编写Java代码如下:
import java.util.Scanner;
public class Main66 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String nn = sc.next();
String ss = sc.next();
String tt = sc.next();
new Main66().count(nn,ss,tt);
}
private static int count = -1;
public int count(String nn,String ss,String tt){
//判断输入的是否是非数字
boolean nIsNum = nn.matches("^(\\d{1,4}|10000)$");
boolean sIsNum = ss.matches("^(\\d{1,4}|10000)$");
boolean tIsNum = tt.matches("^(\\d{1,4}|10000)$"); if(nIsNum && sIsNum && tIsNum){ int n = Integer.parseInt(nn);
int s = Integer.parseInt(ss);
int t = Integer.parseInt(tt); /*
*
* n<1 || s<1 || t<1 :判断负值和0值
* s==t && n!=s: 判断起始点和终点重合,并且总点数N>1(即永远无法到达终点)
* s>n || t>n: 判断起始点和终点对总点数n的越界
* s>t: 起始点是否大于终点
* */
if(n<1 || s<1 || t<1 || (s==t && n!=1) || s>n || t>n || s>t){
count = -1;
}else{
if(s==t && n==s && n==1){
count = 0;
}else if(s==1 && t==n){
count = 0;
}else if(s==1 && t<n){
count = 1;
}else if(t-n==1){
count = 1;
}else if(s>1 && t<n ){
count = 1;
}else if(s>1 && t==n){
count = 2;
}
}
}
System.out.println(count);
return count;
}
}
2.创建测试类,编写测试用例并执行
(1)右击“Main66”这个类,选择“New”---->"JUnit Text Case"

(2)在打开的“New JUnit Test Case”对话框中,项目路径,包名,要测试的类都是默认填好且正确的,检查无误,测试类的类名可以按照默认的“Main66Test”,也可以自己进行设置,
设置完成后,单击“Finish”按钮

(3)"Main66"的测试类就创建成功了

(4)根据上述编写算法题时列出的条件,一次性进行多组数据,每组数据多个参数的测试,以下是我写的对于这个算法题的测试用例
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters; //1、更改默认的测试运行器为@RunWith(Parameterized.class)
@RunWith(Parameterized.class)
public class Main66Test {
//2、声明变量定义预期值和初始值
int expected = 0;//预期值
String input1 = "";//输入值1
String input2 = "";//输入值2
String input3 = "";//输入值3 //3、声明一个返回值为Collection的公共静态方法,并使用@Parameters进行修改
@Parameters
public static Collection<Object[]> t(){
return Arrays.asList(new Object[][]{
//汉字测试
{-1,"输入","2","2"},
{-1,"2","阿尔戈","2"},
{-1,"2","2","热"}, //字母测试
{-1,"a","2","2"},
{-1,"2","a","2"},
{-1,"2","2","w"}, //字符测试
{-1,"@","2","2"},
{-1,"2",".","2"},
{-1,"2","2","'"}, //边界值测试
{-1,"10001","2","2"},
{-1,"2","10001","2"},
{-1,"2","2","10001"},
{-1,"10000","2","2"},
{-1,"2","10000","2"},
{-1,"2","2","10000"},
{-1,"9999","2","2"},
{-1,"2","9999","2"},
{-1,"2","2","9999"}, //大数测试
{-1,"2222222222222222222222","2","2"},
{-1,"2","22222222222222222222222222","2"},
{-1,"2","2","222222222222222222222222222222222"}, //空格测试
{-1," ","2","2"},
{-1,"2"," ","2"},
{-1,"2","2"," "}, //tab测试
{-1," ","2","2"},
{-1,"2"," ","2"},
{-1,"2","2"," "}, //负值测试
{-1,"-1","2","2"},
{-1,"2","-1","2"},
{-1,"2","2","-1"}, //0值测试
{-1,"0","2","2"},
{-1,"2","0","2"},
{-1,"2","2","0"}, //起点和终点重合,但总点数不为1
{-1,"6","6","6"},
{-1,"6","1","1"}, //越界测试
{-1,"1","2","1"},
{-1,"1","1","2"},
{-1,"1","2","2"}, {-1,"6","6","2"},
{-1,"6","3","2"}, //判定覆盖和条件覆盖
{2,"6","2","6"},
{0,"6","1","6"},
{1,"6","1","5"},
{0,"1","1","1"},
{1,"6","2","3"},
{1,"6","2","4"},
{1,"6","1","2"},
});
} //4、为测试类声明一个带有参数的公共构造方法,并在其中为变量赋值
public Main66Test(int expected,String input1,String input2,String input3){
this.expected = expected;
this.input1 = input1;
this.input2 = input2;
this.input3 = input3;
} //5.执行测试方法
@Test
public void testCount() {
assertEquals(expected,new Main66().count(input1,input2,input3));
}
}
(5)右键单击“Main66Test”,执行测试用例

(6)结果及主要参数的含义如下

测试完成。
ps:一个初学者的总结和分享,如果有描述不当的地方,还请各位大佬指正,感谢。
JUint4的下载、配置及对一个算法编写单元测试用例(测试多组数据每组多个参数)的更多相关文章
- Web —— java web 项目 Tomcat 的配置 与 第一个web 项目创建
目录: 0.前言 1.Tomcat的配置 2.第一个Web 项目 0.前言 刚刚开始接触web开发,了解的也不多,在这里记录一下我的第一个web项目启动的过程.网上教程很多,使用的java IDE 好 ...
- 【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介
作者 : 韩曙亮 转载请出名出处 : http://blog.csdn.net/shulianghan/article/details/38636827 一. Linux 内核简介 1. 内核功能简介 ...
- SecureCRT 下载,安装,绝佳配色,实用配置,上传下载配置合集
SecureCRT 下载,安装,绝佳配色,实用配置,上传下载配置合集 chocoball 发布于 2年前,共有 3 条评论 SecureCRT 是一款支持 SSH2.SSH1.Telnet.Telne ...
- selenium的使用与chromedriver的下载配置
Selenium是一个web自动化测试工具,最初是为网站自动化测试而开发的,Selenium可以直接运行在浏览器上,它支持所有主流的浏览器,可以接受指令,让浏览器自动加载页面,获得需要的数据,甚至页面 ...
- 抓包工具fiddler下载配置(一):下载/安装&信任证书
简介 Fiddler一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件 ...
- Node.js npm基础安装配置&创建第一个VUE项目
使用之前,我们先来明白这几个东西是用来干什么的. node.js: 一种javascript的运行环境,能够使得javascript脱离浏览器运行.Node.js的出现,使得前后端使用同一种语言,统一 ...
- matlab使用libsvm入门教程——使用matlab安装配置libsvm以及一个svm分类实例
前言 此教程专注于刚入门的小白, 且博客拥有时效性, 发布于2019年3月份, 可能后面的读者会发现一些问题, 欢迎底下评论出现的问题,我将尽可能更新解决方案. 我开始也在如何安装libsvm上出现了 ...
- 沁恒CH32F103C8T6(三): PlatformIO DAPLink和WCHLink下载配置
目录 沁恒CH32F103C8T6(一): Keil5环境配置,示例运行和烧录 沁恒CH32F103C8T6(二): Linux PlatformIO环境配置, 示例运行和烧录 沁恒CH32F103C ...
- 介绍对称加密的另一个算法——PBE
除了DES,我们还知道有DESede(TripleDES,就是3DES).AES.Blowfish.RC2.RC4(ARCFOUR)等多种对称加密方式,其实现方式大同小异,这里介绍对称加密的另一个算法 ...
随机推荐
- MYSQL的全局变量和会话变量
系统变量又分为全局变量与会话变量. 全局变量在MYSQL启动的时候由服务器自动将它们初始化为默认值,这些默认值可以通过更改my.ini这个文件来更改. 会话变量在每次建立一个新的连接的时候,由MYSQ ...
- Python时间戳的一些使用
Python时间戳的一些使用 为什么写下这篇文档? 由于我本身是做Python爬虫的,在爬取网站的过程当中,会遇到形形色色的验证码,目前对于自己而言,可能简单的验证码可以进行自己识别 发现大多数的网站 ...
- Spring注解?啥玩意?
目录 基础概念:@Bean 和 @Configuration 使用AnnotationConfigApplicationContext 实例化Spring容器 简单的构造 使用register注册IO ...
- Programming In Lua 第一章
1,Lua可以嵌入其他应用程序(如CGILua或IUPLua). 2,lua代码的语句,分号是可以省略的.同一行可以有多条lua语句,最好用分号隔开(当然也可以不隔开) 3,外壳与lua解释器的区别. ...
- pytorch实现yolov3(4) 非极大值抑制nms
在上一篇里我们实现了forward函数.得到了prediction.此时预测出了特别多的box以及各种class probability,现在我们要从中过滤出我们最终的预测box. 理解了yolov3 ...
- HDU 2888:Check Corners(二维RMQ)
http://acm.hdu.edu.cn/showproblem.php?pid=2888 题意:给出一个n*m的矩阵,还有q个询问,对于每个询问有一对(x1,y1)和(x2,y2),求这个子矩阵中 ...
- 微信小程序支付以及微信退款开发
最近公司项目急着测试,需要开发微信小程序+微信支付+微信退款,本着这几天的一些研究,决定记录一下开发的过程. 本着知识分享的原则,希望对大家有所帮助. 本篇针对的是微信小程序的支付开发,如果有对微信公 ...
- Android native进程间通信实例-socket本地通信篇之——服务端进程异常退出解决办法
导读: 好难受啊,为什么服务端说挂就挂,明明只是客户端关闭而已,服务端怎么能挂呢? 想想,如果手机上使用一个聊天程序的时候,手机端关闭了聊天程序,那么远端服务器程序总不能说挂就挂吧!所以一定要查明真相 ...
- Linux日志系统分析:rsyslog、syslog和klog
参考博客: https://blog.csdn.net/lidonghat/article/details/55004280 https://blog.csdn.net/u012247418/arti ...
- 一个简单的EJB例子
转载自 http://blog.sina.com.cn/s/blog_678530f60100hvwy.html 声明:这个Converter的例子应该是J2EE 1.4 Tutorial上面的.不过 ...