/**
 * 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 测试基础的更多相关文章

  1. 【Android Api 翻译1】Android Texting(2)Testing Fundamentals 测试基础篇

    Testing Fundamentals The Android testing framework, an integral part of the development environment, ...

  2. Android Texting(2)Testing Fundamentals 测试基础篇

    Testing Fundamentals The Android testing framework, an integral part of the development environment, ...

  3. Java Junit测试框架

    Java    Junit测试框架 1.相关概念 Ø JUnit:是一个开发源代码的Java测试框架,用于编写和运行可重复的测试.它是用于单元测试框架体系xUnit的一个实例(用于java语言).主要 ...

  4. JUnit单元测试基础要点

    JUnit单元测试基础要点 1.JUnit是一种测试代码的框架,测试的目的是:保证代码没错,而不是保证代码正确. 2.测试类一般不要和目标类放在一起,但编译成的class文件是放在一起的. 3.单元测 ...

  5. 002杰信-陌生的maven-web项目整改成我们熟悉的Web架构;classpath的含义;ssm框架的整合;junit测试

    这篇博客的资源来源于创智播客,先在此申明.这篇博客的出发点是jk项目,传智的做法是Maven的web模板生成的,但是这样子的结构目录与我们熟知的Web项目的结构目录相差很大,所以要按照我们熟知的项目结 ...

  6. 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 ...

  7. 一键自动生成 java junit 测试代码神器 gen-test-plugin 入门介绍

    gen-test-plugin 我们日常编写代码的过程中,经常需要为代码编写测试案例. 随着对代码质量的要求越来越高,很多公司开始通过代码的测试覆盖率作为 QA 的一个评定指标. 本框架可以一键生成所 ...

  8. Android测试基础题(三)

    今天接着给大家带来的是Android测试基础题(三).    需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...

  9. 复利计算器(软件工程)及Junit测试———郭志豪

    计算:1.本金为100万,利率或者投资回报率为3%,投资年限为30年,那么,30年后所获得的利息收入:按复利计算公式来计算就是:1,000,000×(1+3%)^30 客户提出: 2.如果按照单利计算 ...

随机推荐

  1. 源码学习-String类

    最近在扫描CodeDex时报了一个不能使用String.intern()的字符串来做锁对象的告警,对这个问题有疑问查了些资料,顺便学习一下String类的源码. 1.类定义 String 被final ...

  2. node Buffer.byteLength()

    Buffer.byteLength(string[, encoding]) string {String} | {Buffer} | {TypedArray} | {DataView} | {Arra ...

  3. matplotlib.pyplot.pcolormesh

     matplotlib.pyplot.pcolormesh(*args, alpha=None, norm=None, cmap=None, vmin=None, vmax=None, shading ...

  4. cadence中画焊盘注意事项

    贴片焊盘的层面剖析图如下: 其中Paste Mask Top层用于制作钢网,可以做成与Top层相同的大小.阻焊层一般比顶层大0.1mm(方形焊盘的长,宽,圆形焊盘的直径). 助焊层与阻焊层区别 两个层 ...

  5. Qt笔记——各种组件和其他细碎用法

    LineEdit 获取文本:ui->usrLineEdit->text() 清空内容:ui->pwdLineEdit->clear(); 定位光标:ui->usrLine ...

  6. Leetcode 152.乘机最大子序列

    乘积最大子序列 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 ...

  7. 九度oj 题目1060:完数VS盈数

    题目1060:完数VS盈数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6461 解决:2426 题目描述: 一个数如果恰好等于它的各因子(该数本身除外)子和,如:6=3+2+1.则称其 ...

  8. 概率dp呜呜

    概率dp有环怎么办? 答案可劲迭代 ,然后可劲消元 , 怎么消? 我就不知道了. 呵呵

  9. Visual C++ 网络编程 笔记

    第一章 网络分层模型 OSI模型应用层:服务于应用程序的协议,比如用于域名解析的DNS协议,用于下载界面内容的HTTP协议表示层:处理不同硬件和操作系统之间的差异,确保应用层之间顺利通信 and 加密 ...

  10. Ubuntu 16.04安装Markdown编辑器MarkMyWords

    继上一篇文章http://www.cnblogs.com/EasonJim/p/7119345.html中使用Sublime Text 3进行Markdown的编辑,总觉得操作上比较繁琐,现在推荐使用 ...