java 单元测试用例_Java 单元测试及JUnit的使用
Java 单元测试:
单元测试是开发者编写的一小段代码,用于检测被测代码的一个很小的、很明确的功能是否正确。
单元测试的方法:
人工静态分析:人工阅读检测代码
自动静态分析:使用代码复查工具检查
自动动态测试:用工具自动生成测试用例并执行被测程序
人工动态测试:人工设定程序的输入和预期输出,执行程序。
Junit 单元测试:
它是人工动态测试
支持语言C++、Java,支持的IDE: Eclipse
功能:用单独的classloader来运行每个单元测试
标准的资源初始化和回收方式(setUp、tearDown)
Eclipse 使用Junit测试的方法
1、导入 Junit Jar包,可以在Java Build Path 中添加,最好直接使用Eclipse 自带的JUnit套件
2、为单元测试代码创建单独的目录,单元测试代码和被测试代码建议使用一样的包层结构。比如src\com\lls\Person.java 和 testSrc\com\lls\PersonTest.java
3、创建单元测试类,可以直接通过Eclipse的Junit Test Case 功能进行添加,这样就只需修改Source folder即可
下面内容为Junit 4.0之后内容
4、Junix 包所定义的注解及其意义
方法注解
@Before - 它所修饰的方法在每个测试方法执行之前都要执行一次。 之前没有注解的版本叫做setUp方法
@After - 它所修饰的方法在每个测试方法执行之后都要执行一次。 tearDown方法
@Test - 测试用的方法,他可以添加参数来对特定的情况进行验证
比如@Test(expected=*.class) 表示的是异常的类型,如果没有产生异常则失败
@Test(timeout = xxx) 表示的是测试的最大时间,超时则认为失败
@ignore - 它所修饰的测试方法会被忽略
其中@Before 和@After 被称为Fixture,也就是每个测试之前都必须要执行的内容
5、测试方法使用要求
@Test
public void xxx(无参)
6、使用Eclipse的 Run as Juit来执行测试用例
如果与测试结果不符,则结果为 失败 failure
如果测试时,直接产生异常,则结果为error
7、测试套件
也就是一次执行多个测试用例
方法:创建一个空类作为测试套件的入口。使用注解RunWith和SuiteClasses修饰这个空类。
将org.junit.runners.Suite 作为参数传入注解RunWith,表示使用套件运行器执行。
将测试类组成数组作为注解SuiteClasses的参数
比如:
@RunWith(Suite.class)
@Suite.SuiteClasses({xx1.class, xx2.class})
public class RunAllUtilTestsSuite {
}
原理及框架说明
8、Runner 运行器
在运行测试代码的时候是通过Runner来运行(也就是Runner的子类),比如,默认的JUnit4Cla***unner(不过这个已经废弃了,看来有了新的)
它可以用@RunWith 注解来说明,需要注意的是它修饰的是类
里面包含两个特殊的测试,参数化测试、套件打包测试
参数化测试:
@RunWith(Parameterized.class)
首先应该为这种测试专门生成一个新的类,因为他要用一个新的运行器。然后指定运行器为Parameterized。
然后在测试类中定义两个变量,一个用于存放参数,另一个存放期待的结果。接下来定义测试数据的集合,用@Parameters标注进行修饰。
构造函数中对变量进行初始化,顺序需要与集合中的顺序一致,比如{参数,预期结果}。
打包测试:
通常在一个项目中,我们需要写很多个测试类,打包测试就是一次执行多个或所有的测试类.
@RunWith(Suite.class) // 指定运行器
@Suite.SuiteClass({..,..,..}) // 指定需要同时测试的类待测试的类:
package com.test;
public class Calculator {
private static int result;// 静态变量,用于存储运行结果
public void add(int n) {
result = result + n;
}
public void substract(int n) {
result = result - 1;
// Bug: 正确的应该是 result = result - n;
}
public void multiply(int n) {
}
// 此方法尚未写好
public void divide(int n) {
result = result / n;
}
public void square(int n) {
result = n * n;
}
public void squareRoot(int n) {
for (;;)
;
// Bug : 死循环
}
public void clear() {
// 将结果清零
result = 0;
}
public int getResult(){
return result;
}
}
// ------------- 基本测试
package com.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
public class CalculatorTest {
private static Calculator calculator = new Calculator();
@Before
public void setUp() throws Exception {
calculator.clear();
}
@After
public void tearDown() throws Exception {
}
@Test
public void testAdd() {
calculator.add(2);
calculator.add(3);
assertEquals(5, calculator.getResult());
}
@Test
public void testSubstract() {
calculator.add(2);
calculator.add(3);
assertEquals(5, calculator.getResult());
}
@Ignore("not implemented yet")
@Test
public void testMultiply() {
fail("Not yet implemented");
}
@Test
public void testDivide() {
calculator.add(8);
calculator.divide(2);
assertEquals(4, calculator.getResult());
}
@Test(expected = Exception.class)
public void DivideByZero(){
calculator.divide(0);
}
}
// ----------------- 多个参数测试
package com.test;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class SquareTest {
Calculator calculator;
private int param;
private int result;
public SquareTest(int param,int result) {
this.param = param;
this.result = result;
}
@Before
public void setUp() throws Exception {
calculator = new Calculator();
}
@After
public void tearDown() throws Exception {
}
@Parameters
public static Collection data(){
return Arrays.asList( new Object[][]{{2,4},{0,0},{-2,4}});
}
@Test
public void testSquare() {
calculator.square(param);
assertEquals(calculator.getResult(),result );
}
}
// --------------- 打包测试
@RunWith(Suite.class)
@Suite.SuiteClasses({CalculatorTest.class, SquareTest.class })
public class AllCalculator {
}
java 单元测试用例_Java 单元测试及JUnit的使用相关推荐
- java 单元测试用例_Java之单元测试工具(Junit)
Junit是Java单元测试框架,一般Eclipse里面会集成这个Junit4测试工具 既然是测试工具,虽然开发用得比较多,但作为测试人员也需要具备会Junit测试的思想,况且技多不压身 这里简单介绍 ...
- 软件测试 单元测试用例设计,单元测试的用例设计
首先,我们先来思考一个问题:单元测试中,哪一个环节更重要? 要回答这个问题,我们先需要了解单元测试到底有哪些环节,读到这里,请暂停一分钟,回忆一下我们平时的单元测试实践(请最小化浏览器). 对于单元测 ...
- java 单元测试 异步_Java/Android编写异步的单元测试用例
不写单元测试用例的程序员不是一个好CTO!!! 注:以下内容编码环境为AndroidStudio_2.4Preview6,测试框架 JUnit4.12 今天在研究 MVP_RxJava2_Retrof ...
- java 单元测试_Java程序员必须要知道的单元测试框架Junit详解
作为一名java开发者,相信你或多或少的接触过单元测试,对于测试来讲它是一门能够区分专业开发人员与业余开发人员的重要学科,这篇文章将对java中最常见的一个单元测试框架junit进行一个梳理和讲解.如 ...
- Java编程技巧之单元测试用例编写流程
简介: 立足于"如何来编写单元测试用例",让大家"有章可循",快速编写出单元测试用例. 作者 | 常意 来源 | 阿里技术公众号 温馨提示:本文较长,同学们可收 ...
- java 代码覆盖率_java单元测试覆盖率统计
很多时候,开发写了单元测试,但是我们并不知道当前的单元测试覆盖率是怎么样的,所以我们需要有技术手段来分析我们的单元测试覆盖率情况. 那么,jacoco来了... jacoco介绍: jacoco 是一 ...
- Java之单元测试(JUnit单元测试框架)
一.概述 单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,所以单元测试就是针对Java方法的测试,进而检查方法的正确性. 常规测试有什么问题? 只有一个main方法,如果 ...
- JUnit单元测试用例
2019独角兽企业重金招聘Python工程师标准>>> 注意在编写测试用例的时候,要保持测试用例的独立性 一个原则,每条单元测试用例都必须独立运行,不能依靠其他测试用例,或者不能按照 ...
- 单元测试用例_前端单元测试实践
一说到单元测试,可能对于业务一线同学来说,心理立马就会无形中有一种压迫感,心想 "业务都做不完了,写个球的单元测试,先保证功能完备,赶紧上线才是王道",这句话的核心是以业务为重,没 ...
最新文章
- 工业级光纤收发器的“附加属性“功能介绍
- python怎么实现图像去噪_基于深度卷积神经网络和跳跃连接的图像去噪和超分辨...
- python requests cookie_python requests 带cookie访问页面
- pytorch使用Ray-tune对原有训练模型的代码改写,自动调参(一)
- STM32-RTC实时时钟
- 【JAVA】Maven profiles控制多环境数据源日志打包(转载)
- 2018-05-02 os.path
- Kelvin云层效果Ps笔刷
- struts2基本介绍
- UBT19:ubuntu安装qq与微信
- Pthread多线程
- matlab 图像 变成二维,matlab三维图像变二维
- 用html做龙卷风特效,利用HTML5实现Canvas龙卷风特效
- 【可视化开发】数据大屏可视化技术汇总
- 软件行业常用英文解释
- 学计算机小升初,小升初微机派位什么意思
- 25.请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字 符串。
- lda 可以处理中文_自然语言处理——使用词向量(腾讯词向量)
- python 安装 pyinstaller 报错Preparing wheel metadata ... error
- 盘点人工智能重点技术领域