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.如果按照单利计算 ...
随机推荐
- 初次使用IDEA创建maven项目
第一次使用IDEA,创建一个maven项目,首先下载maven,官方地址:http://maven.apache.org/download.cgi 解压,在环境变量里配置 path里 D:\maven ...
- nodejs学习(一) ---- nodejs + express应用生成器 快速创建应用
1.node安装及环境配置(自行百度) 2.express安装及配置 (自行百度) 3.通过应用生成器工具 express 快速创建应用骨架 全局安装应用生成器 : npm install exp ...
- Mongo索引学习笔记
索引使用场景 优:加快查询速度 劣:增删改会产生额外的开销.占用空间 tips: 返回集合中一半以上的数据,全表扫描的效率高 索引基础 基础操作 查看索引:db.test.getIndexes() 创 ...
- 监听服务器 重启apache
import requests import os import time url = 'http://www.ydyigo.com/findPwd.php' def get_server_statu ...
- web前端开发——HTML
一.简介 1.发展史 (1)web1.0 时代 产物:网页制作 那时的网页主要是静态网页,即没有与用户交互,仅仅是提供信息浏览的网页.如QQ日志.博文等. 网页制作三剑客:Dreamweaver+Fi ...
- 对于BFC(block format context)理解
目录 前言 Box: CSS布局的基本单位&盒模型 什么是BFC?(Block formatting contexts) 元素与盒 正常流 块级与行内级 产生垂直外边距合并的必备条件 前言 什 ...
- Spring AOP配置简单记录(注解及xml配置方式)
在了解spring aop中的关键字(如:连接点(JoinPoint).切入点(PointCut).切面(Aspact).织入(Weaving).通知(Advice).目标(Target)等)后进行了 ...
- Jmeter&Ant构建自动化测试平台
JMeter是一个软件,使负载测试或业绩为导向的业务(功能)测试不同的协议或技术. Apache软件基金会的Stefano Mazzocchi JMeter的最初的开发.他写道:它主要对 Apache ...
- 九度oj 题目1182:统计单词
题目1182:统计单词 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4780 解决:1764 题目描述: 编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别 ...
- 概率dp呜呜
概率dp有环怎么办? 答案可劲迭代 ,然后可劲消元 , 怎么消? 我就不知道了. 呵呵