Junit4 简单教程

一、环境搭建

       对于习惯使用Eclipse开发平台来说,Junit早已是非常通常的插件,在Eclipse开发平台中,可以非常方便地搭建Junit测试环境。

       1、在Eclipse上创建工程,任何Java工程都行。

       2、引入Junit的libraries库,选用Junit4。如下图所示:

3、新建一个Java类,用于演示Junit4类的自动生成,java代码如下:

[java]view plaincopy在CODE上查看代码片派生到我的代码片
  1. package com.hy;  
  2.   
  3. public class Demo {  
  4.   
  5.     public void method1() {  
  6.         System.out.println("method1");  
  7.     }  
  8.   
  9.     public void method2() {  
  10.         System.out.println("method2");  
  11.     }  
  12.   
  13.     public void method3() {  
  14.         System.out.println("method3");  
  15.     }  
  16.   
  17. }  

4、在该类上右键单击新建,选JUnit Test Case,自动生成一个对应的测试类,如下图所示:


4、这样就能自动地生成对应的测试类了,测试类代码发下:

[java]view plaincopy在CODE上查看代码片派生到我的代码片
  1. package com.hy;  
  2.   
  3. import static org.junit.Assert.*;  
  4.   
  5. import org.junit.After;  
  6. import org.junit.AfterClass;  
  7. import org.junit.Before;  
  8. import org.junit.BeforeClass;  
  9. import org.junit.Test;  
  10.   
  11. public class DemoTest {  
  12.   
  13.     @BeforeClass  
  14.     public static void setUpBeforeClass() throws Exception {  
  15.     }  
  16.   
  17.     @AfterClass  
  18.     public static void tearDownAfterClass() throws Exception {  
  19.     }  
  20.   
  21.     @Before  
  22.     public void setUp() throws Exception {  
  23.     }  
  24.   
  25.     @After  
  26.     public void tearDown() throws Exception {  
  27.     }  
  28.   
  29.     @Test  
  30.     public void testMethod1() {  
  31.         fail("Not yet implemented");  
  32.     }  
  33.   
  34.     @Test  
  35.     public void testMethod2() {  
  36.         fail("Not yet implemented");  
  37.     }  
  38.   
  39.     @Test  
  40.     public void testMethod3() {  
  41.         fail("Not yet implemented");  
  42.     }  
  43.   
  44. }  


5、如此一来,测试类环境的搭建过程就完成了,最后要做的就是,根据实际的业务需求,对测试类中的测试方法编写单元测试代码,直到运行调通。

 

二、基本规则

       从上面的演示可知,测试类名一般都以Test结尾,测试方法名以test开头。这个也是Junit的基本命名规则。

 

三、Junit注解

      我们此次针对的是Junit4版本,注解也是在Junit4版本才有的,之前的版本并无注解功能。而注解开发基本上被认为是一种优秀的设计,所以我们写单元测试用例时,尽可能地去了解并使用注解。

     @Test:使用该注解的方法为测试方法,自动运行时能够识别并被执行

      包含两个参数:expected=XXXException.class 期望出现的异常

                               timeout=xxx 设定程序运行的超时时间

     @Ignore:被忽略的测试方法

     @Before:在每个测试方法之前运行

     @After: 在每个测试方法之后运行

     @BeforeClass:在所有测试开始之前运行

     @AfterClass:在所有测试开始之后运行
  

      以上几个就是Junit 4的关键注解,熟练使用这几个注解,将来的测试用例编写肯定能事半功倍。

     注意:@Before与@BeforeClass的区别

     @Before会加在每个方法前执行,即有几个@Test就会执行几遍。

     @BeforeClass 只在所有测试之前执行,只会执行一次。并且@BeforeClass修饰的方法必须是公有的静态方法(public static )。

     @After和@AfterClass也类似

     每个测试类中这四个注解不能重复使用,一个方法只能从这四个注解中挑选其中一个。

 

四、基本写法

       1、setUp(),tearDown(),setUpBeforeClass(),tearDownAfterClass()这四个方法其实就是对应的@Before、@BeforeClass、@After、@AfterClass这四个注解,在Junit4开始使用注解时,其实可以替代这四个方法的功能,只是这四个方法是历史遗留方法,可以考虑使用,也可以直接使用注解替代。

       2、Assert是单元测试用例的核心,建议使用静态导入。

       3、待测试对象,一般建议设计成静态的。

       4、测试方法的要求:带@Test注解,方法名随意,返回值必须为void,不能带有参数,可以声明异常(可以参考演示代码)。

       5、Fixture方法的作用

            前面介绍的@Before、@BeforeClass、@After、@AfterClass注解修饰的方法,即为Fixture方法,它是在某些阶段必然被调用的方法,如注解功能所示。

            @Before、@After修饰方法的一个用处是对待测试对象的“复原”操作,如成员变量回归,数据库回滚等,目的是消除@Test方法之间的耦合。也可以用来打印日志。

            @BeforeClass修饰方法可以设计成用来加载一些耗时耗力的操作,如文件流的读取,数据库连接等,然后在@AfterClass中释放对应的资源即可。

      6、限时测试

           @Test(timeout=1000)超时时间单位为毫秒

           用于测试是否有死循环工是实时性要求比较高的用例,这个非常方便而且非常有用。

      7、测试异常

            @Test(expected=XXXException.class) XXXException为声明式异常

            用来验证声明式异常,注意此测试的含义:出现了期望的异常,叫做正常,若没出现异常,Junit会报错,认为不正常。这段描述有些拗口,请各位多琢磨琢磨。

      8、运行器Runner

            类注解@RunWith,指定不同的类可以改变测试类的行为

      9、参数化测试

            主要是针对一些相同功能却要进行多组参数测试的情况,开发步骤如下:

            1)参数化测试的类和普通测试类不同,要用特殊的Runner,类注解需要改为@RunWith(Parameterized.class)

            2)定义该测试类的成员变量,一个放测试参数,另一个放该参数产生的预期结果

            3)定义测试数据集合方法 public static Collection data() {...},注意该方法要用@Parameters修饰(数据格式为二维数组)

            4)定义带参数的构造函数,注意定义数据集合时,要和构造函数参数次序一致

            其他的与普通测试类似

            注意:若测试数据有两条,则该类下的所有@Test的方法都会执行两次,所以参数化测试的类不要和别的@Test放在一起。参数化测试方法一般建议单独建立类。

            演示代码如下:

[java]view plaincopy在CODE上查看代码片派生到我的代码片
  1. //指定@RunWith  
  2. @RunWith(Parameterized.class)  
  3. public class ParamTest {  
  4.   
  5.     //定义成员变量,i为测试参数,j为测试结果  
  6.     private int i;  
  7.     private int j;  
  8.   
  9.     //构造函数  
  10.     public ParamTest(int i, int j) {  
  11.         super();  
  12.         this.i = i;  
  13.         this.j = j;  
  14.     }  
  15.   
  16.     //测试数据集合,注意使用的注解,数据结构及次序  
  17.     @Parameters  
  18.     public static Collection data() {  
  19.         return Arrays.asList(new Object[][]{{1,2},{3,4},{4,6}});  
  20.     }  
  21.     @Test  
  22.     public void testMethod1() {  
  23.         System.out.println(i);  
  24.         System.out.println(j);  
  25.         //简单测试,只测试参数加1会不会等于预期结果  
  26.         Assert.assertEquals(i+1, j);  
  27.     }  
  28. }  

       预期的执行结果是前两组参数测试正确,最后一组测试错误,运行后的结果为:

执行结果与预期结果相符合,OK

 

      10、打包测试

            将测试类集中起来运行,提高测试效率,代码如下:

[java]view plaincopy在CODE上查看代码片派生到我的代码片
  1. @RunWith(Suite.class)  
  2. @Suite.SuiteClasses({  
  3.     DemoTest.class  
  4. })  
  5. public class ModuleTest {  
  6.   
  7.     public ModuleTest() {  
  8.         // TODO Auto-generated constructor stub  
  9.     }  
  10.   
  11. }  

           1)@Suite.SuiteClasses里面的是需要打包测试的类

           2)该类中可以为空,类名建议为模块名+Test结尾,如ModuleTest.java

      以上是Junit4的最基本的使用,相信掌握了这些,对于编写常规的测试用例已经不是难事,同样,Junit还有更多更有意思的功能等待我们去挖掘……

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

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

相关文章

Qt显示中文的方法

QT 显示中文的三种方法 最近在用Qt做项目,遇到UI不能显示中文的问题,发现有3种方法可以解决,先记录一下 方法一 QString::fromLocal8Bit("你好中国")1 方法二 QStringLiteral("你好中国")1 方法三 在.…

python中exception类的_面试题 | 列举几个Python中的标准异常类?

【摘要】今天给大家解答一道Python常见的面试题,希望这个面试栏目,给那些准备面试的同学,提供一点点帮助!小编会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给…

jsonp和CORS跨域实现

一、jsonp&#xff0c;使用jquery封装的$.ajax&#xff0c;返回数据类型要设置为jsonp 示例&#xff1a; $.ajax({type: get,contentType: "application/json; charsetutf-8",url: "http://localhost:8080/aqi/getCityList.php",dataType: jsonp,< /spa…

Qt数字与字符串之间的相互转换

把QString转换为 double类型方法1.QString str"123.45";double valstr.toDouble(); //val123.45方法2.很适合科学计数法形式转换bool ok;double d;dQString("1234.56e-02").toDouble(&ok); //oktrue;d;12.3456.把QString转换为float形1.QString str&qu…

无线ap软件_无线WIFI网络干扰优化,不懂必看!新手在家里也能用的网络知识

由于国家频谱资源分配中保留一些频段用于工业、科研、医疗等方面应用&#xff0c;即ISM频段&#xff0c;如2.400到2.483G和5.170到5.825G。使用这些频段都无需许可证&#xff0c;只需要遵守一定的发射功率任何厂家都可以使用&#xff0c;WLAN也采用ISM频段。随着WLAN技术在企业…

postgresql 比较两个时间差大于 N个小时

摘要: PG 中时间想减后为interval &#xff0c;比较两个时间大于某个小时或者分钟等可以直接通过interval来实现 example1&#xff1a; -- 判断两个时间差大于4个小时 select timestamp 2013-11-11 10:00:00 - timestamp 2013-11-08 12:00:00 > interval 4 hour; examp…

spring mvc重定向_Spring的Web MVC –重定向到内存泄漏

spring mvc重定向他们说一块岩石会引起雪崩。 最近&#xff0c;我的一位同事Marcin Radoszewski给了我一块岩石。 您可能永远不会猜到它是什么&#xff0c;但是有机会在许多Web应用程序中使用它。 请允许我向您介绍这块石头。 您可能很清楚发布模式后的重定向 。 使用Spring F…

关闭8080端口

转载于:https://www.cnblogs.com/Health-zhang/p/10775034.html

Qt 布局(水平、垂直、网格)

开发一个图形界面应用程序&#xff0c;界面的布局影响到界面的美观。在设计一个界面之前&#xff0c;应该考虑到开发的界面可能给不用的用户使用&#xff0c;而用户的屏幕大小、纵横比例、分辨率可能不同&#xff0c;界面还可能是可缩放的&#xff0c;程序应该可以适应这些变化…

JSR 365更新:深入CDI 2.0

上下文和依赖注入2.0&#xff08; JSR 365 &#xff09;是CDI 1.2的更新&#xff0c;CDI 1.2目前是Java EE 7平台的一部分。 目前处于公开审查阶段 。 对于不熟悉CDI的那些人&#xff0c;它定义了一组功能强大的免费服务&#xff0c;这些服务可充当凝胶&#xff0c;帮助改善应用…

postgres复制表结构

复制表结构 12create table his_process_data_201405 as( select * from his_process_data_201406 limit 0)完整复制一张表 12create table his_process_data_201405 as( select * from his_process_data_201406)

Django 数据导入和导出

一&#xff0c;简单的数据导出与导入&#xff08;简单的迁移&#xff09; 1. django 项目提供了一个导出的方法 python manage.py dumpdata, 不指定 appname 时默认为导出所有的app 1python manage.py dumpdata [appname] > appname_data.json比如我们有一个项目叫 mysite, …

cifar-10 图像转为jpg

dir_file目录下需有这几个文件 源代码 #codingutf-8 import cv2 import numpy as np import os#文件夹名 str_2 ./train_cifar10 str_1 ./test_cifar10#判断文件夹是否存在&#xff0c;不存在的话创建文件夹 if os.path.exists(str_1) False: os.mkdir(str_1) if os.path.e…

python3小游戏源代码_Python3制作仿“FlappyBird”小游戏|python3教程|python入门|python教程...

https://www.xin3721.com/eschool/pythonxin3721/ 本文转载至知乎ID&#xff1a;Charles&#xff08;白露未晞&#xff09;知乎个人专栏 下载W3Cschool手机App&#xff0c;0基础随时随地学编程>>戳此了解 导语 本期我们将制作一个仿“经典90坦克大战”的小游戏。啊&#…

java java编码_Java编码约定被认为是有害的

java java编码在Oracle网站上有Java编程语言的官方代码约定指南。 您可能希望这份超过20页的文档将是有关Java语言的最佳实践&#xff0c;提示和技巧的最完整&#xff0c;最全面和最权威的来源。 但是一旦您开始阅读它&#xff0c;失望和沮丧和愤怒就会增加。 我想指出本指南中…

PostgreSQL数据库修改sql表的方法汇总

一&#xff0c;修改表 PostgreSQL 提供了一族命令用于修改现有表。 可以实现&#xff1a; 增加字段&#xff0c; 删除字段&#xff0c; 增加约束&#xff0c; 删除约束&#xff0c; 修改默认值&#xff0c; 重命名字段&#xff0c; 重命名表。 这些操作可以用&#xff1a;ALTE…

混淆矩阵怎么看_201.工具篇MECE法则:透过结构看世界。

工具篇|战略工具1之前讲过了商业、管理、个人&#xff0c;今天讲如何用工具来提高上述的效率工具。今天先讲一MECE法则。某公司将2020年定为品牌战略年&#xff0c;小王接到领导安排写作任务&#xff0c;要求充分阐述公司 的品牌主张。小张憋了半天&#xff0c;稿子交了上去。领…

nRFgo Studio 和 Nrfjprog 无法找到JLinkARM.dll的解决方法

本文转自&#xff1a;https://www.lotlab.org/2017/09/12/nrfgo-studio-and-nrfjprog-could-not-find-jlinkarm-dll/ Segger在第一次安装的时候&#xff0c;会在注册表中添加安装路径的字段&#xff0c;nRF的两个软件就根据这两个注册表字段来寻找JLinkARM.dll。而当你卸载/更新…

mnist数据集图片提取出来

# -*- coding: UTF-8 -*-# 把mnist数据集转成图片做测试&#xff0c;图片更为通用import cv2 import os from keras.datasets import mnistimport numpy as np str_1 mnisttrain str_2 mnisttest if os.path.exists(str_1):os.mkdir(str_1)if os.path.exists(str_2):os.mkdir…

重新打包流中的异常

Java 8已有两年的历史了&#xff0c;但是仍然存在社区尚未为其开发好的解决方案的用例&#xff0c;甚至边缘用例。 如何处理流管道中的已检查异常就是这样的问题之一。 Stream操作接受的功能接口不允许实现抛出已检查的异常&#xff0c;但是我们可能要调用许多方法。 显然&…