一、初始化标注

在老Junit4提供了setUp()和tearDown(),在每个测试函数调用之前/后都会调用。

@Before: Method annotated with @Before executes before every test.
@After:   Method annotated with @After executes after every test.

如果在测试之前有些工作我们只想做一次,用不着每个函数之前都做一次。比如读一个很大的文件。那就用下面两个来标注:

@BeforeClass
@AfterClass

注意:

@Before/@After 可以有多个; @BeforeClass/@AfterClass 只有一个

如果我们预计有Exception,那就给@Test加参数:

@Test(expected = XXXException.class)

如果出现死循环怎么办?这时timeout参数就有用了:

@Test(timeout = 1000)

如果我们暂时不用测试一个用例,我们不需要删除或都注释掉。只要改成:

@Ignore

你也可以说明一下原因@Ignore("something happens")

二、运行原理:

JUnit运行时都是由一个runner运行的。你可以根据需要选择不同的Runner来运行你的测试代码。指定一个Runner,需要使用@RunWith标注,并且把你所指定的Runner作为参数传递给它。系统自动使用默认Runner TestClassRunner来运行你的代码。如下:

@RunWith(TestClassRunner.class)

public class JavaTest { …… }

JUnit4提出了"参数化测试"的概念,只写一个测试函数,把这若干种情况作为参数传递进去,一次性的完成测试。代码如下:

@RunWith(Parameterized.class)
public class JavaTest {
private int param;
private int param2;
private int result;

@Parameters public static Collection data() {
return Arrays.asList(new Object[][]{ { 2, 4, 6 }, { 0, 0, 0 }, { -3, 9, 6 } });
}

// 构造函数,对变量进行初始化
public JavaTest(int param, int param2, int result) {
this.param = param;
this.param2 = param2;
this.result = result;
}

@Test public void run() {
//do some thing use args, and assert it
int expected = param + param2;
assertEquals(expected, result);
}
@Ignore("lala") public void lala() {
assertEquals(3,3);
}
}

首先,你要为这种测试专门生成一个新的类,为这个类指定一个Runner,特殊的功能要用特殊的Runner:@RunWith(Parameterized.class) 
第二步,定义测试数据的集合,也就是上述的data()方法,该方法可以任意命名,但是必须使用@Parameters标注进行修饰。这是一个二维数组,每组数据产生一个测试Instance.
第三步,构造函数,取得传过来的参数。
最后,用取得的参数做测试。@Test public void …

三、打包测试:

采取分而治之的方法,我们可以写多个类来降低测试难度。我们有时也希望一次把所有测试跑一遍,这时我们写一个打包类

import junit.framework.JUnit4TestAdapter;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({
JavaTest.class,
JustDo.class
})
public class TestAll {
}

四、多线程测试

JUnit4的Test写好以后,对于一些集成度比较高的测试用例,还希望完成并发访问情况下的测试,但是,JUnit4缺省情况没有提供,我希望通过自己写一个main函数,然后创建几个线程,在几个线程中同时运行测试用例进行测试,来模拟并发访问的情况,下里为具体例子:

public class TestExample {

@Test
public void testMethod() {
System.out.println("test success!");
}
}

public class PerfomanceTest {

public static void main(String[] args) {
new Thread() {public void run() { 
// JUnitCore.runClasses(new Class[] { TestExample.class });           (1)
// new JUnitCore().run(Request.method(TestExample.class, "testMethod"));        (2)
}}.start();
}
}
注:标志1或标志2中只要用一种就可以测试。

Junit4学习笔记的更多相关文章

  1. JUnit4 学习笔记

    一.环境搭建: 1.需要用的包: JUnit4.7:http://files.cnblogs.com/files/ShawnYang/junit4.7.zip hamcrest-1.2:http:// ...

  2. Junit4学习笔记--方法的执行顺序

    package com.lt.Demo.TestDemo; import java.util.Arrays; import java.util.Collection; import org.junit ...

  3. ActiveMQ学习笔记(5)——使用Spring JMS收发消息

      摘要 ActiveMQ学习笔记(四)http://my.oschina.net/xiaoxishan/blog/380446 中记录了如何使用原生的方式从ActiveMQ中收发消息.可以看出,每次 ...

  4. mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)

    文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文 ...

  5. Hibernate 马士兵 学习笔记 (转)

    目录(?)[+] 第2课 Hibernate UML图 第3课 风格 第4课 资源 第5课 环境准备 第6课 第一个示例Hibernate HelloWorld 第7课 建立Annotation版本的 ...

  6. Spring Boot学习笔记2——基本使用之最佳实践[z]

    前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...

  7. Spring学习笔记(六)—— SSH整合

    一.整合原理 二.整合步骤 2.1 导包 [hibernate] hibernate/lib/required hibernate/lib/jpa 数据库驱动 [struts2] struts-bla ...

  8. #Spring实战第二章学习笔记————装配Bean

    Spring实战第二章学习笔记----装配Bean 创建应用对象之间协作关系的行为通常称为装配(wiring).这也是依赖注入(DI)的本质. Spring配置的可选方案 当描述bean如何被装配时, ...

  9. SSM框架学习笔记_第1章_SpringIOC概述

    第1章 SpringIOC概述 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架. 1.1 控制反转IOC IOC(inversion of controller)是一种概念 ...

随机推荐

  1. SOAP消息分析

    根据WebService学习笔记系列(二)中的介绍,使用tcpmon可以捕获到我们发出或者接收到的xml内容,接天我们就对这些xml内容做一个简单的分析.还记得在WebService学习笔记系列(四) ...

  2. XC图片浏览器

    XC图片浏览器,这是基于Android4.4开发的一款浏览手机里的图片的浏览器.简单美观实用.欢迎下载. 下载地址:http://download.csdn.net/detail/jczmdevelo ...

  3. JVM Davilk ART 简介 区别

    JVM和DVM JavaSE 程序使用的虚拟机叫 Java Virtual Machine,简称 JVM.Android 平台虽然是使用java语言来开发应用程序,但Android程序却不是运行在标准 ...

  4. javascript 之原型理解

    最近一直在了解javascript原型的问题,也算是理解了一点,希望把我所理解的,用简单的例子和说明,让更多人清除的去理解javascript原型 1,原型 prototype 是一个什么东西 我们创 ...

  5. HTML 5 全局属性

    下面的全局属性可用于任何 HTML5 元素.HTML 5 全局属性NEW:HTML 5 中新的全局属性.属性 描述accesskey 规定访问元素的键盘快捷键class   规定元素的类名(用于规定样 ...

  6. PHP的数据库 之 关闭问题

    首先,PHP由于有垃圾回收机制,所以数据库即使你不手动关闭,也有自动去关闭的机制, 这里就和操作文本流不同,文本流需要手动去关闭,不然会发生内存浪费现象 并且,PHP在同时连接多个DB的时候,连接到一 ...

  7. jQuery Ajax(load,post,get,ajax)用法与详解

    今天看到群里面有网友们问到Jquery Ajax的(load,post,get,ajax)之间的区别,现在整理了一篇文章出来,希望可以帮到网友们,首先我们先来看一些简单的方法, 这些方法都是对jQue ...

  8. [Twisted] 事件驱动模型

    在事件驱动编程中,多个任务交替执行,并且在单一线程控制下进行.当执行I/O或者其他耗时操作时,回调函数会被注册到事件循环. 当I/O完成时,执行回调.回调函数描述了在事件完成之后,如何处理事件.事件循 ...

  9. C#中检查网络是否连通的二种方法

    using System;  2 using System.Collections.Generic;  3 using System.Text;  4 //方法一  5 using System.Ru ...

  10. gpload的简单实用

    准备工作: 1.因为gpload是对gpfdist的封装,因此使用gpload之前必须开启gpfdist的服务,不然无法使用. gpfdist -d /home/admin -p 8181 -l /t ...