Junit是Java单元测试框架,一般Eclipse里面会集成这个Junit4测试工具

既然是测试工具,虽然开发用得比较多,但作为测试人员也需要具备会Junit测试的思想,况且技多不压身

这里简单介绍下用法:

1、在eclipse中创建一个junit4Test工程

点击“File” -> “New” -> “Java Project”,出现如下界面,填写工程名称junit4Test:

点击Next或者Finish,即创建好了junit4Test工程

2、创建com.junit4Test包

右键“junit4Test”工程名称,选择“New” -> “Package”,即得到包的配置界面如下:

填写包名,然后点击Finish即创建了junit4TestPackage包

3、创建被测试类和方法

这里我们用简单的加法来做被测试对象

右击包名“junit4TestPackage” -> “New” -> “Class”,出现下面的配置界面:

配置好类名称,然后点击“Finish”即创建了类,然后在类里面写一个加法的方法:

package com.junit4Test;

public class Add {
public int addTest(int x,int y){
return x + y;
} }

  

4、创建测试包

创建方法和上面的创建包一样,取个名字“junit4AddTest”

5、创建测试类

右键测试包名“com.junit4AddTest” -> “New” -> “JUnit Test Case”,如果你没有导入Junit的jar包,那你需要先导入下,右击工程名称“junit4Test”,选择“Properties”或者选择“Build Path” -> “Configure Build Path” ,出现如下配置界面:

按照上面步骤配置即可。然后按照开始说的,就会出现如下配置界面:

写好测试类名称,选择好需要的方法(如无需要可以不选择)和需要测试的类(因为不在一个包里面,这里填写的是包名+类名),然后点击“Next”:

勾选被测试方法addTest,然后选择“Finish”,这时候就创建好了用例:

这时候看到的是一个空的测试方法,我们需要调用被测试方法并做断言,上面右侧红框中应该是如下代码:

package com.junit4AddTest;

import static org.junit.Assert.*;
import com.junit4Test.*;
import org.junit.Test; public class AddTest { @Test
public void testAddTest() {
int z = new Add().addTest(1,2);
assertEquals(3,z);
} }

  

这时候就可以执行测试类了,右击测试用例可以看到,原来是执行java程序,现在变成了执行junit Test:

执行结果如下:

执行结果是Runs:1/1(总共一个用例,执行了一个用例),Errors:0(没有错误),Failures:0(没有失败)

如果我们把断言值改成:assertEquals(2,z);,则结果如下:

把断言改了之后,左侧显示Failures:1(失败一个用例),用例也显示为,左侧下面也给出了Trace。

我们在测试类中复制一个testAddTest方法,一个错误的一个成功的:

package com.junit4AddTest;

import static org.junit.Assert.*;
import com.junit4Test.*;
import org.junit.Test; public class AddTest { @Test
public void testAddTest() {
int z = new Add().addTest(1,2);
assertEquals(2,z);
}
@Test
public void testAddTest1() {
int z = new Add().addTest(2,2);
assertEquals(4,z);
} }

  

我们再执行下看看结果如下:

失败的依然是标记失败

------------------------------------------------------------------华丽的分割线------------------------------------------------------------------

补充说明下Junit 的几种注解(和python中的装饰器类似):

  1.@Test: 测试方法

    a)(expected=XXException.class)如果程序的异常和XXException.class一样,则测试通过
    b)(timeout=100)如果程序的执行能在100毫秒之内完成,则测试通过

  2.@Ignore: 被忽略的测试方法:加上之后,暂时不运行此段代码(JUnit5中使用@Disabled代替)

  3.@Before: 每一个测试方法之前运行(Junit5中使用@BeforeEach)

  4.@After: 每一个测试方法之后运行(Junit5中使用@BeforeEach)

  5.@BeforeClass: 方法必须必须要是静态方法(static 声明),所有测试开始之前运行,注意区分@before,是所有测试方法(Junit5中使用@BeforeAll)

  6.@AfterClass: 方法必须要是静态方法(static 声明),所有测试结束之后运行,注意区分 @After(Junit5中使用@AfterAll)

  7.@Parameters:表示该方法是个参数化测试(Junit5中使用@ParameterizedTest)

需要导入如下:

import org.junit.Test;
import org.junit.Ignore;
import org.junit.Before;
import org.junit.After;
import org.junit.BeforeClass;
import org.junit.AfterClass;

  

如果在创建JUnit case的时候,勾选了相关项,则在case里面就会自动生成(下图红色框):

setUpBeforeClass对应BeforeClass

setUp对应Before

tearDownAfterClass对应AfterClass

tearDown对应After

这个有点类似python中unittest框架中的setUp和tearDown,包括里面的断言。使用过的小伙伴应该一看就懂

另外Junit框架和python中unittest框架类似的是测试套件(testsuite)这个概念,下面讲解下套件如何使用

我们在原来加法基础上再增加一个被测类(减法),如下:

package com.junit4Test;

public class Minus {
public int Minus(int x,int y){
return x - y;
}
}

则被测包中有俩个被测类:

在测试类中响应增加减法的测试类:

package com.junit4AddTest;

import static org.junit.Assert.*;

import org.junit.Test;
import com.junit4Test.*; public class MinusTest { @Test
public void test() {
int z = new Minus().Minus(5,2);
assertEquals(3,z);
} }

这样,我们就有俩个类三个测试用例:

我们在测试类的包里面增加一个套件类,来统一管理测试类:

测试套件代码如下:

package com.junit4AddTest;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite; @RunWith(Suite.class)
@Suite.SuiteClasses({AddTest.class,MinusTest.class})
public class AllTestCase {
/*
* 这里不需要写任何东西
* 把需要的测试类填写到上面SuiteClasses中即可
*/
}

  

这样便于测试类的管理~

Java之单元测试工具(Junit)的更多相关文章

  1. Java程序单元测试工具对比——Parasoft Jtest与Junit

    Web应用程序开发中,面向对象的Java语言占了不少的比重.对于Java应用程序的测试方法或方式多种多样,比较典型的是程序员自己来完成程序测试中的一个部分——单元测试. 之前,慧都资讯提到单元测试是程 ...

  2. Maven的安装配置及初次创建项目与java单元测试工具JUnit

    Maven  安装     1.把maven安装包解压到某个位置     2.配置M2_HOME环境变量指向这个位置 3.在path环境变量中添加;%M2_HOME%\bin 配置镜像 国内的阿里云镜 ...

  3. 单元测试工具Junit浅谈

    什么是单元测试?   写了一个类和一些方法,给别人用,会不会有bug?那就测一下这些方法吧 怎么测?   用main方法测?不能一起运行,需要人为观察输出是否正确,测试效率低 单元测试能带来什么好处? ...

  4. 11th 单元测试工具JUnit的学习

    1.写好一个简易的四则运算的程序 UnitTest类文件: public class UnitTest { int a; int b; int answer;//正确答案 public int plu ...

  5. 测试 | 单元测试工具 | JUnit | 参数化

    被测试类: package project; public class MyCalendar2 { public int getNumberOfDaysInMonth(int year, int mo ...

  6. 测试 | 单元测试工具 | JUnit

    http://junit.sourceforge.net/javadoc/org/junit/Assert.html 使用: 新建测试类: 在预测试的类上点击右键--->NEW--->Ju ...

  7. Hibernate单元测试工具junit

    相关注解 @Text :测试方法 @Before :初始化方法 @After : 释放资源

  8. Java知识积累——单元测试和JUnit(一)

    说起单元测试,刚毕业或者没毕业的人可能大多停留在课本讲述的定义阶段,至于具体是怎么定义的,估计也不会有太多人记得.我们的教育总是这样让人“欣 慰”.那么什么是单元测试呢?具体科学的定义咱就不去关心了, ...

  9. 单元测试利器 JUnit 4

    引言 毋庸置疑,程序员要对自己编写的代码负责,您不仅要保证它能通过编译,正常地运行,而且要满足需求和设计预期的效果.单元测试正是验证代码行为是否满足预期的有效手段之一.但不可否认,做测试是件很枯燥无趣 ...

随机推荐

  1. Python Day 13 装饰器

    阅读目录   内容回顾 函数嵌套的定义 global.nonlocal关键字 闭包及闭包的运用场景 开放封闭原则 装饰器 一个函数被多次装饰 ##内容回顾 1.函数对象:函数名 => 存放的是函 ...

  2. windows10系统安装Oralce11g时遇到INS-13001环境不满足最低要求

    升级win10系统之后,需要重新安装Oracle,因为在安装Oralce11g时,使用64位的会出现各种不兼容问题,我每次安装都是使用32位的数据库. 在安装时点击setup.exe之后,出现了:[I ...

  3. 浅谈React数据流管理

    引言:为什么数据流管理如此重要?react的核心思想就是:UI=render(data),data就是我们说的数据流,render是react提供的纯函数,所以用户界面的展示完全取决于数据层.这篇文章 ...

  4. Python 协程 61

    什么是协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程的特点 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到 ...

  5. fiddler抓包工具总结

    Fiddler 抓包工具总结 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也 ...

  6. TensorFlow学习笔记1

    1.daocloud 拉取 docker镜像 docker pull daocloud.io/daocloud/tensorflow:latest 镜像位置: /Users/{YourUserName ...

  7. python视频地址和链接

    算法 链接:http://pan.baidu.com/s/1nvHmcZJ 密码:fwjg常用库 链接:http://pan.baidu.com/s/1o8uPvPg 密码:yp3w进阶-高级代码 链 ...

  8. 代码文档生成工具Doxygen的使用备忘

    Doxygen备忘 下载与安装 一般步骤 生成配置文件Doxyfile: doxygen (-s) -g 建立目录结构, 比如Doxyfile文件\doc文件夹(输出)\src文件夹(放代码) -&g ...

  9. GC算法基础

    寻找垃圾对象的算法:1. 引用计数(无法处理循环引用) 2. 根寻法(被广泛引用在gc算法中) 清理垃圾的算法: 1. 标记复制  2. 标记清理  3. 标记整理 分代算法的好处: 1. 分代处理, ...

  10. 25.HashTable

    在java中有两个类都提供了一个多种用途的hashTable机制,他们都可以将key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的 ...