在Eclipse中使用JUnit4进行单元测试(图文教程一)

在Eclipse中使用JUnit4进行单元测试

    单元测试,JUnit4。

   这两个有什么关系呢?这就好比(草)单元测试和(割草机)。用这个JUnit4工具去辅助我们进行测试。其实不理解这个也没关系,听多了见多了用多了,自然而然地就会懂了。

   有人可能会想,那我直接自己编写个测试的方法不就可以了。例如写个System.out.print输出,看看是否与我们预期的相等。Bingo!这样也是可以的。但是你有割草机不用,那效果也是很Duang的。

   开始我也觉得没有必要使用割草机(JUnit)的,但是我了解了割草机(JUnit)之后,我很喜欢那种唰唰唰(绿条)的感觉。

   如果你还是一脸疑惑不知道什么是JUnit4,不知道单元测试,OK,Don‘t worry。Just Follow me.跟我一步一步来,先让你体验下唰唰唰的快感。

 

第一步:

打开eclipse.exe,创建一个名为“Ives”的工项目,创建一个名为”UnitTest”的类。写几个方法:两数+ - * /的方法和返回结果的方法。

代码如下:

 1 import java.util.*;
 2 public class Expression {
 3     int a;
 4     int b;
 5     static int c;//用户答案
 6     int answer;//答案
 7     static Scanner in=new Scanner(System.in);
 8 
 9 
10 public int Expression(){
11     a = new Random().nextInt()%10;
12     b = new Random().nextInt()%10;
13     System.out.print(""+a+"+"+b+"=");
14     return answer = a + b;
15 
16 }
17 public static void main(String[] args){
18     int answer;
19     Expression expression = new Expression();
20     answer = expression.Expression();
21     try{
22         Expression.c = in.nextInt();
23     }
24     catch(InputMismatchException e)
25     {   System.err.println("\nError  ,please Enter a Int number");
26     }
27     if(answer==c)
28     {
29         System.out.print("答对了");
30     }
31     else System.out.print("答错了");
32     //System.out.print("answer="+answer);
33 }
34 }
View Code

 

 

第二步:

Duang!酷炫的效果来了,跟紧脚步了。

JUnit4单元测试包引入这个项目:在该项目“Ives”上点右键,点“属性”(Properties),如图:

在弹出的属性窗口中,首先在左边选择“Java 构建路径(Java Build Path)然后到右上选择"库(L)"(Libraries)标签,之后在最右边点击“添加库(A)”(Add Libraries)按钮,如下图所示:

 

点击完成,JUnit4软件包就被包含进我们这个项目了。

 

第三步:

生成JUnit测试框架:在Eclipse的包资源管理器(Package Explorer)中用右键点击该类”UnitTest“弹出菜单,选择 新建 →JUnit测试用例 (New à JUnit Test Case)。如下图所示:

 

 

 

在弹出的对话框中,进行相应的选择,如下图所示:


点击完成之后会出现如下图:

 

 

千万不要去删除@Test这个标志很重要的!!!!!然后把fail(“尚未实现”)删除,把自己的代码敲进去就可以了。我选择了测试4个方法,所以它会自动生成4个测试方法。

 

Duang!!!

那测试方法怎么写呢?举个例子,我想知道我的UnitTest里面的plus方法有没有写对,那我就对这个方法写个测试。把a,b两个数传递进去,例如a=1和b=1,那a+b就等2,所以这里我们又要了解新的东西了。那就是关于JUnit 的api了,下面有关于JUnit的api,到时候我看看要不要贴几个常用的方法出来,加上实例,这样会更加容易理解。

继续我们的话题:我们知道a+b=2,所以如果plus方法的result是2的话,那就说明了我们的这个plus暂时没有这类型的bug。所以我们要用到方法assertEquals(double expected, double actual)这个方法里的double expected是我们期望的值,double actual是实际的值。例如assertEquals(2, a+b),这样就可以测试方法有没有算错了。其实电脑一般都不会算错吧?哈哈

 

完整的测试代码如下:

 1 import static org.junit.Assert.*;
 2 import org.junit.Test;
 3 
 4 public class UnitTestTest {
 5     public static UnitTest puls = new UnitTest();
 6     public static int answer;
 7     @Test
 8     public void testPlus() {
 9         puls.plus(1,1);
10         assertEquals(2, puls.getresult());
11     }
12 
13     @Test
14     public void testMinus() {
15         puls.minus(1,1);
16         assertEquals(0, puls.getresult());
17     }
18     
19     @Test
20     public void testMultiply() {
21         puls.multiply(1,1);
22         assertEquals(1, puls.getresult());
23         
24     }
25     
26     @Test(expected=ArithmeticException.class)
27     public void testDivide1(){
28         puls.divide(0, 1);
29     }
30     
31     @Test
32     public void testDivide() {
33         puls.divide(1,1);
34         assertEquals(1, puls.getresult());
35     }
36 }
View Code

 

可能用心看的童鞋可能会发现我还写了一个测试时关于有没有抛出异常的。如果除数为0那就抛出异常,再去测试它除数为0是有没有抛出异常。有人可能会问,我不知道什么异常啊,很简单,看

 

 

我们写完代码,那么唰唰唰的快感马上就要到来了。

 

 

我把minus方法里的“减号”改成了“加号”:如下图

 

然后在运行测试类UnitTestTest.如下图:

 

被测试的代码有bug,也就是之前把-修改成了+,所以就会出故障。

 

所以当全部都是绿色的时候是不是很爽,有没有感受到割草机(JUnit4)的唰唰唰的快感。

哈哈,教程到这里就结束了。是不是还想要更多?那就持续关注我的博客吧,可能会在更新一遍更加细节的。

 

个人体会:

1.测试类一定要看清楚有没有写对,有时候复制黏贴没有修改就会出现错误,所以要看清楚调用的方法对了没有。

2.这个好像真的有比自己写一个测试类来测试更爽,因为有一条绿色的东西,感觉很好玩。

3.我觉得这些小程序不需要写单元测试,而且看到好多人在网上吐槽说现在基本做开发的都不会去写单元测试的,不过,写多点没事儿,所学点更好。所以我不想去追究以后有没有用,现在能学想学那就去学,能写想写,那就去写。所以有时候真的不需要问为什么?有很多事情你现在做可能没有收益,也可能以后也没有收益,那为什么要去做呢?

柯腾说,你信不信十年后,我连log是什么都不知道,还可以活得好好的。 沈佳宜说,我知道。 柯景腾说,那你还那么用功读书。 沈佳宜说,人生本来很多事就是徒劳无功的啊!不是每一件事一定要有意义,经历同样很宝贵! 

有感而发,就引用了这句话了。哈哈

 

---------这篇博文就到此结束了------------

 

 

--------如果以上有什么错误或者不足之处,欢迎指出。--------

 

PS:长期招募小伙伴一起组成一个团队学习软件开发(java), 可以合作开发软件,也可以讨论交流,有志同道合的小伙伴可以发站内消息。

 

附:

 Junit API:http://www.udel.edu/CIS/software/dist/junit4.1/javadoc/

转载于:https://www.cnblogs.com/IvesHe/p/4468138.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 9和Project Jigsaw如何破坏您的代码

Java 9迫在眉睫,它将带有完整的Project Jigsaw 。 在我从OpenJFX邮件列表的最近讨论中得知它可能会破坏现有代码之前,我并没有对此给予太多关注。 这对于Java非常不寻常,因此引起了我的兴趣。 我阅读了该项目的JEP和一些相关文章&#xff0c…

mysql 表结构 增删改查_mysql学习【第3篇】:数据库之增删改查操作

注意的几点:1.如果你在cmd中书命令的时候,输入错了就用\c跳出2.\s查看配置信息一、操作文件夹(库)增:create database db1 charset utf8;删:drop database db1;改:alter database db1 charset gbk;查:show …

HTML5的非主体结构元素(header、footer、hgroup、assress)

header元素footer元素hgroup元素address元素网页编排规则 1.header元素 代码演示: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>header元素</title> </head> <body> &l…

DVWA通关教程(上)

简介&#xff1a; DVWA是一款基于PHP和mysql开发的web靶场练习平台&#xff0c;集成了常见的web漏洞如sql注入,xss&#xff0c;密码破解等常见漏洞。本教程将以DVWA为例&#xff0c;演示常见的web漏洞的利用和攻击。 登录创建数据库&#xff08;账号为admin&#xff0c;密码为…

HTML5表单新增元素与属性(form、formaction、formmethod、formenctype、formtarget、autofous、required、labels)

表单内元素的form属性表单内元素的formaction属性​​​​​​​表单内元素的formmethod属性​​​​​​​表单内元素的formenctype属性​​​​​​​表单内元素的formtarget属性​​​​​​​表单内元素的autofous属性​​​​​​​表单内元素的required属性​​​​​​​…

2048

最近用WPF写了款2048的小游戏&#xff0c;最早接触这款游戏是在手游上&#xff0c;觉得蛮好的&#xff0c;于是就用WPF实现了下&#xff0c;界面运行流畅&#xff0c;操作便捷&#xff0c;虽说程序在可玩度上还稍有欠缺&#xff0c;不过这也是WPF在游戏开发中的一个新篇章 程序…

表单新增元素与属性(control、placehoulder、list、AutoComplete、pattern、SelectionDirection、indeterminate属性)

标签的control属性文本框的placehoulder属性文本框的list属性文本框的AutoComplete属性文本框的pattern属性文本框的SelectionDirection属性复选框的indeterminate属性image提交按钮的height属性与width属性1.标签的control属性 代码演示: <!DOCTYPE html> <html la…

jboss7.0.2_JBoss AS 7.0.2“ Arc”发布–使用绑定选项

jboss7.0.2有关JBoss AS7方面的更多好消息。 JBoss AS 7.0.2.Final“ Arc”已经发布&#xff01; 自AS 7.0.1发布以来已经过去了一个月。 在这短时间内&#xff0c;修复了许多错误&#xff0c;并实现了更多功能和改进。 所有这些错误修复和功能已包含在此7.0.2版本中。 此新版…

DVWA通关教程(中)

不安全的验证码&#xff08;Insecure CAPTCHA&#xff09; Insecure CAPTCHA(不安全的验证码)主要是绕过验证码的安全验证&#xff0c;一般都有逻辑漏洞。 难度&#xff08;low&#xff09; 审计代码 <?phpif( isset( $_POST[ Change ] ) && ( $_POST[ step ] 1 …

UVa 208 Firetruck【回溯】

题意&#xff1a;给出一个n个节点的无向图&#xff0c;以及某个节点k&#xff0c;按照字典序从小到大输出从节点1到节点k的所有路径 看的题解 http://blog.csdn.net/hcbbt/article/details/9755147 因为节点数很少&#xff08;小于20&#xff09;&#xff0c;所以可以先用floyd…

html中使用静态图片做一个csdn网站的首页

简单使用csdn网站的截图做一个网站的DEMO, 简单把CSDN网站分为四个图片(自己截图),分别为上,左,中,右,使用IDEA创建一个静态Web项目。 代码演示:(不添加样式,简单演示效果) <!DOCTYPE html> <html lang="en"> <head><meta chars…

使用docker-compose的Spring会话演示

我之前已经写过一个令人振奋的新项目&#xff0c;称为Spring-session &#xff0c;它为基于Java的Web应用程序提供了一种外部化用户会话的干净方法。 我设法使用docker-compose为spring-session进行了良好的演示设置&#xff0c;这展示了该项目的优势&#xff0c;我想在这里写…

kail利用msf工具对ms11-003漏洞入侵渗透Win7

前言&#xff1a; windows7IE溢出攻击 实验环境&#xff1a; 工具&#xff1a;metasploit 靶机两台&#xff1a;windows 7和kali2020 攻击机IP地址&#xff1a;10.20.29.129 被攻击机IP地址&#xff1a;10.20.29.134 步骤&#xff1a; 1、在kali里面打开metasploit漏洞…

python中升级pip报错_linux系统下pip升级报错的解决方法

Pip 安装1、在python中提供了一个get-pip.py;下面是地址https://bootstrap.pypa.io/get-pip.py2、在Linux下执行curl https://bootstrap.pypa.io/get-pip.py | python进行下载安装这样很方便了 想装什么包就装什么包Pip install xxx注意&#xff1a;升级完python版本注意&…

域名如何设置才能带www和不带www都能正常访问

在自己的域名添加两条解析记录&#xff0c;一个带www,另一个记录不设置即可。然后绑定到正常的站点。

微软MS11-050漏洞的利用

微软MS11-050漏洞的利用 0x00 前言0x01 环境搭建1. 虚拟机系统2. 拓扑结构 0x02 利用过程1. 相互ping通2. 启动Metasploit3. 查找和MS11-050相关的模块4. 加载模块5. 设置所使用的payload6. 显示需要配置的选项7. 设置Web服务器的地址&#xff0c;应为BackTrack虚拟机的地址8.…

python中数据类型大小_详细解析Python中的变量的数据类型

变量是只不过保留的内存位置用来存储值。这意味着&#xff0c;当创建一个变量&#xff0c;那么它在内存中保留一些空间。根据一个变量的数据类型&#xff0c;解释器分配内存&#xff0c;并决定如何可以被存储在所保留的内存中。因此&#xff0c;通过分配不同的数据类型的变量&a…

Java中多线程的性能比较

Java中有多种用于多线程的技术。 可以通过同步关键字&#xff0c;锁或原子变量来并行化Java中的一段代码。 这篇文章将比较使用synced关键字ReentrantLock&#xff0c;getAndIncrement&#xff08;&#xff09;以及执行get&#xff08;&#xff09;和compareAndSet&#xff08;…

微软ms10_018漏洞的利用

微软ms10_018漏洞的利用 0x00 前言0x01 study1. 漏洞利用环境1.1 目标机环境1.2 攻击机环境1.3 拓扑结构 2. ping测试3. exploit3.1 启动Metasploit3.2 查找和MS10-018相关的模块3.3 加载模块3.4 设置PAYLOAD3.5 显示需要配置的选项3.6 设置Web服务器的地址&#xff0c;应为Ba…

【深度】机器学习进化史:从线性模型到神经网络

【深度】机器学习进化史&#xff1a;从线性模型到神经网络 Reza Zadeh是斯坦福大学工程计算和数学研究所顾问教授&#xff0c;也是Databricks公司技术顾问&#xff0c;他主要专注于机器学习理论和应用&#xff0c;分布式计算&#xff0c;以及离散应用数学。近日&#xff0c;他接…