/**
 * 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. 变量加.self

    self相当于java里面的this,表示类的对象本身.加个self.是为了调用对应的set方法,如果不加,就不调用,不掉用就会造成引用计数的retainCount不加一,不加一就会被直接释放,结果就 ...

  2. Failed to resolve filter报错原因

    问题 页面写过滤器,控制台报错,Failed to resolve filter 分析 语法错误?先检查 ``` {{ params | filterA }} filters: { filterA: ...

  3. 邮箱地址自动提示jQuery插件

    // mailAutoComplete.js v1.0 邮箱输入自动提示// 2010-06-18 v2.0 使用CSS class类代替CSS对象,同时增强代码可读性// 2010-06-18 v2 ...

  4. show()的几种方法

    1 show()方法和hide()方法 $("selector").show()  从display:none还原元素默认或已设置的display属性$("selecto ...

  5. 常见的awk内建变量

    FS: 输入字段分隔符变量 语法: $ awk -F 'FS' 'commands' inputfilename 或者 $ awk 'BEGIN{FS="FS";}' OFS: 输 ...

  6. loadrunner 添加负载机

    1.打开Controller 2. 添加负载 3. 配置参数 4.完成

  7. Springboot开启事务

    参考资料: https://blog.csdn.net/message_lx/article/details/77584847

  8. 百度富文本编辑器UEditor自定义上传图片接口

    如下图:  然后修改ueditor.all.js   

  9. BNUOJ 5363 Machine Schedule

    Machine Schedule Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Origin ...

  10. set/multiset用法详解

    集合 使用set或multiset之前,必须加入头文件<set> Set.multiset都是集合类,差别在与set中不允许有重复元素,multiset中允许有重复元素. sets和mul ...