Junit 测试基础
/**
* 1、测试函数以 @Test 注解, 函数名可以根据测试内容自定义但返回值必须是void,不能有参数
* 2、assertEquals(arg0,arg1); 用来判断期待值是否和实际结果相等, 第一个参数 写期待结果,第二个参数写实际结果。juni会自动对比返回测试结果
* 3、@Ignore 表示忽略此函数 一般在写程序之前我们应该做好规划,即哪个程序是干什莫的,如果测试时 程序还没写好 可以先用个@Ignore注解,测试时结果会提示你有几个测试被忽略,在程序写好后只需把注解去掉,进行测试便可以
* 4、 fixture(固定代码段)就是在某些阶段必然被调用的代码 可以做一些初始化工作 或者选择 将 测试类 进行初始化 来防止 测试之间的相互影响 如果在计算器中有静态变量 res我们就可以通过 @before或@after 把res清零
* 5、@BeforeClass 和 @AfterClass 如果在测试一个类对较大的文件进行操作,测试每个方法都对文件进行读取,将会耗费大量时间,显然不切实际。这时我们希望在所有测试之前读一次文件,在所有测试结束后是放文件,这时便可以使用@BeforeClass和 @AfterClass 每个测试类只能有一个方法被标注为@BeforeClass 或 @AfterClass,并且该方法必须是Public和Static的。
* 6、@Test(timeout=1000)限时测试 在函数中我们会用到循环,但是如果失误出现死循环 那这个测试会花费大量时间而得不到结果, 为了避免这种情况 我们可以对函数测试进行限时,超时后强行中止次方法的测试
* 7、@Test(expected = ArithmeticException.class)测试异常,java中常会编写函数有异常抛出,如果你觉得一个函数应该抛出异常,但是没有抛出,显然需要被检测到。我们需要使用@Test的excepted属性,将我们要检验的异常值传递给她,这样junit就能自动帮我们检测是否抛出异常
* 8、@RunWith(TestClassRunner.class)(运行器用来修饰类而不是函数) 当我们将代码交给Junit之后框架如何来运行你的代码————通过Runner 在Junit中有许多Runner 负责调用你的测试代码, Junit 中有默认的Runner 在特殊情况下我们需要调用 特定的Runner
* 9、 @RunWith(Parameterized.class) 指定此运行器可以进行参数化测试 对于每个方法的测试我们通常会使用多组数据来测试, 这时我们不需要测试一组修改一下代码 ,也不需要创建多个测试类 只需要改变 Runner
* 10、@RunWith(Suite.class) 打包测试 在一个项目中只写一个测试类是不可能的,我们会写很多的测试类,可这些测试类必须一个一个的执行,也是比较麻烦的事。鉴于此,junit为我们提供了打包测试的功能,将所有需要运行的测试类集中起来,一次性的运行完毕,大大方便了我们的测试工作。
*/
编写calculator1
public class Calculator1 {
public int add(int n1,int n2){
return n1+n2;
}
public int minus(int n1 ,int n2) {
return n1-n2;
}
}
编写calculator1的测试类
package junittest;
/**
* import static org.junit.Assert.*;
* 采用静态导入
* 检测结果用的assertEquals(4,res);函数是来自于类Assert的静态方法
* 使用静态导入之后在调用时就不必使用Assert.assertEquals(4,res);
*/
import static org.junit.Assert.*; import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
public class Calculator1Test {
public Calculator1 calculator = new Calculator1();
/**
* 在测试方法之前执行
* @throws Exception
*/
@Before
public void setUp() throws Exception {
System.out.println("Calculator1 方法测试开始");
}
/**
* 在测试方法之后执行
* @throws Exception
*/
@After
public void tearDown() throws Exception {
System.out.println("Calculator1 方法测试结束");
}
/**
* 测试Add 函数名可以自定义但返回值必须是void,不能有参数 (junit4 新加入)
*/
@Test
public void Add() {
int res = calculator.add(2, 3);
assertEquals(4,res);
}
/**
* 此方法尚未写好 标记@Ignore
*/
@Test
@Ignore
public void Minus() { } }
编写calculator2
import org.junit.Test;
public class Calculator2 {
@Test(timeout = 1000)
public void mult(int n1, int n2){
for(;;);
}
public int divi(int n1, int n2){
return n1/n2;
}
}
编写calculator2测试类
package junittest; import static org.junit.Assert.*; import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test; public class Calculator2Test {
public Calculator2 calculator2 = new Calculator2();
/**
* 标记在整个测试类前执行
* @throws Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("Calculator2测试开始");
}
/**
* 标记在整个测试类后执行
* @throws Exception
*/
@AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("Calculator2测试结束");
}
/**
* 内置死循环 会超时 超时测试会失败
*/
@Test(timeout = 1000)
public void testMult() {
calculator2.mult(1, 2);
}
/**
* 除数不能为0 预期抛出错误 如果不抛出错误 测试失败
*/
@Test(expected = ArithmeticException.class)
public void testDivi() {
calculator2.divi(5, 0);
}
}
编写打包测试类
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class)
@Suite.SuiteClasses({Calculator1Test.class,Calculator2Test.class})
public class AllTest { }
编写参数化测试用例:
import static org.junit.Assert.*; import java.util.Arrays;
import java.util.Collection; import junittest.Calculator1; import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
/**
* 参数化测试
* @author Administrator
*
*/
@RunWith(Parameterized.class)
public class Parametrictest {
public Parametrictest(int n1, int n2, int result) {
super();
this.n1 = n1;
this.n2 = n2;
this.result = result;
}
private static Calculator1 calculator1 = new Calculator1();
private int n1;
private int n2;
private int result;
@Parameters
public static Collection data(){
return Arrays.asList( new Object[][]{
{2,4,6},
{0,0,0},
{-3,9,6}
});
}
/**
* 以add为例进行测试
*/
@Test
public void add(){
int res = calculator1.add(n1, n2);
assertEquals(result,res);
}
}
Junit 测试基础的更多相关文章
- 【Android Api 翻译1】Android Texting(2)Testing Fundamentals 测试基础篇
Testing Fundamentals The Android testing framework, an integral part of the development environment, ...
- Android Texting(2)Testing Fundamentals 测试基础篇
Testing Fundamentals The Android testing framework, an integral part of the development environment, ...
- Java Junit测试框架
Java Junit测试框架 1.相关概念 Ø JUnit:是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.它是用于单元测试框架体系xUnit的一个实例(用于java语言).主要 ...
- JUnit单元测试基础要点
JUnit单元测试基础要点 1.JUnit是一种测试代码的框架,测试的目的是:保证代码没错,而不是保证代码正确. 2.测试类一般不要和目标类放在一起,但编译成的class文件是放在一起的. 3.单元测 ...
- 002杰信-陌生的maven-web项目整改成我们熟悉的Web架构;classpath的含义;ssm框架的整合;junit测试
这篇博客的资源来源于创智播客,先在此申明.这篇博客的出发点是jk项目,传智的做法是Maven的web模板生成的,但是这样子的结构目录与我们熟知的Web项目的结构目录相差很大,所以要按照我们熟知的项目结 ...
- Maven运行JUnit测试(http://www.360doc.com/content/13/0927/15/7304817_317455642.shtml)
Maven单元测试 分类: maven 2012-05-09 15:17 1986人阅读 评论(1) 收藏 举报 maven测试junit单元测试javarandom 目录(?)[-] maven ...
- 一键自动生成 java junit 测试代码神器 gen-test-plugin 入门介绍
gen-test-plugin 我们日常编写代码的过程中,经常需要为代码编写测试案例. 随着对代码质量的要求越来越高,很多公司开始通过代码的测试覆盖率作为 QA 的一个评定指标. 本框架可以一键生成所 ...
- Android测试基础题(三)
今天接着给大家带来的是Android测试基础题(三). 需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...
- 复利计算器(软件工程)及Junit测试———郭志豪
计算:1.本金为100万,利率或者投资回报率为3%,投资年限为30年,那么,30年后所获得的利息收入:按复利计算公式来计算就是:1,000,000×(1+3%)^30 客户提出: 2.如果按照单利计算 ...
随机推荐
- Nginx出现403 forbidden (13: Permission denied)报错的四种原因
一.由于php-fpm启动用户和nginx工作用户不一致所致 php-fpm启动用户配置位置 nginx工作用户配置位置 二.不存在在文件,可能是文件路径有误,可以查看nginx错误日志来判断 三.缺 ...
- assert.deepEqual()
assert.deepEqual(actual, expected[, message]) 深度比较 actual 和 expected 参数,使用比较运算符(==)比较原始值. 只考虑可枚举的&qu ...
- 安装 asp.net core 出错
I received the same error message on a fresh Windows 10 install, with a fresh Visual Studio 2015 ins ...
- 对于BFC(block format context)理解
目录 前言 Box: CSS布局的基本单位&盒模型 什么是BFC?(Block formatting contexts) 元素与盒 正常流 块级与行内级 产生垂直外边距合并的必备条件 前言 什 ...
- 【已解决】ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked
官网说明: elasticsearch官网建议生产环境需要设置bootstrap.memory_lock: true 官网的解释 是:发生系统swapping的时候ES节点的性能会非常差,也会影响节点 ...
- JS逻辑运算符&&与||的妙用
JS逻辑运算符&&与||的妙用 /* 文章写的不错 就此分享 */ &&中第一个表达式为假就不会去处理第二个表达式,直接放回结果. || 中就刚很好相反.如果第一个 ...
- 第一个web项目
1) 创建Java Web Project 2) 创建相应的包 3) 创建类并继承于HttpServlet 4) 重写service()方法 5) ...
- C++标准模板库 ——堆栈使用
include using namespace std; stack S; S.push(i); S.pop(); int x = S.top(); ```
- Light oj-1004 - Monkey Banana Problem,数字三角形的变形版~
100 ...
- 7-9 旅游规划(25 分)(Dijkstra最短路径算法)
有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路径都是最短的,那么需要输出最便 ...