- 浏览: 895289 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (537)
- Java SE (114)
- Struts (18)
- Hibernate (25)
- Spring (3)
- Page_Tech (41)
- Others (87)
- Database (29)
- Server (24)
- OpenSource_Tools (15)
- IDE_Tool (22)
- Algorithm (28)
- Interview (22)
- Test (28)
- Hardware (1)
- Mainframe (25)
- Web application (4)
- Linux (3)
- PHP (17)
- Android (1)
- Perl (6)
- ubuntu (1)
- Java EE (9)
- Web Analysis (5)
- Node.js (2)
- javascript (2)
最新评论
-
一键注册:
request.getRequestURL()和request.getRequestURI() -
SuperCustomer:
...
SED的暂存空间和模式空间 -
juyo_ch:
讲得挺好理解的,学习了
java 死锁及解决 -
chinaalex:
最后一题答案正确,但是分析有误.按照如下过程,上一行为瓶,下一 ...
zz智力题 -
liaowuxukong:
多谢博主啦,弱弱的了解了一点。
C++/Java 实现多态的方法(C++)
标准的Junit4流程及实现 public class Junit4Sample { @Before @Test @Test @After @AfterClass
我们先看一个标准的Junit4的运行流程,大致如下:
测试类实例化->运行@BeforeClass->运行@Before->运行@Test->运行@After->运行@AfterClass,
下面的代码输出明确表明了其运行流程,初学者可运行查看其结果输出。import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@BeforeClass
public static void beforeClass(){
System.out.println("BeforeClass,to be run once before any of the test methods in the class");
}
public void before(){
System.out.println("Before,to be run before the {@link org.junit.Test} method");
}
public void testA(){
System.out.println("Test,can be run as a test case");
}
public void testB(){
System.out.println("Test,can be run as a test case");
}
public void after(){
System.out.println("After,to be run after the {@link org.junit.Test} method");
}
public static void afterClass(){
System.out.println("AfterClass,to be run after all the tests in the class have been run");
}
}
这样的流程是怎么实现的呢?也就说Junit4.5+版本是如何处理这些Annotation并赋予了他们神奇的魔力的?请看大屏幕:
上图略去了其他次要方法,总之run方法还是入口,绕了一大圈后会调用with打头的方法处理流程中的@Before、@After等Annotation。
值得注意的是每个这样的方法都会有个Statement参数,封装了前一个流程中的Statement,其返回者也是个Statement供下个流程节点调用,就像个管道,Statement在管道里流啊流,管道里有一些点对流经的Statement进行特定处理。
通常情况下,Junit提供的Annotation已经很能满足需求了,这些注解其实就是对公用代码的一种抽象,比如要在每个测试用例方法执行前要执行一段代码就把他们提取出来为单独的方法并用@Before注解即可。可是,当有些问题很普遍很通用时懒人们不想在程序里写这样的Before方法了,比如配置文件的加载,测试前置数据装载等。
于是,就出现了更多的自定义的Annotation,怎么把这些自定义的Annotation功能嵌入到Junit的标准流程中呢?
=============================================================================
JUnit为我们在项目测试中常用到的单元测试框架,很多程序员的理想套件,本篇文章主要介绍JUnit4的常见annotation.
一、初始化标注
在老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) @Parameters public static Collection data() { // 构造函数,对变量进行初始化 三、打包测试: 采取分而治之的方法,我们可以写多个类来降低测试难度。我们有时也希望一次把所有测试跑一遍,这时我们写一个打包类 import junit.framework.JUnit4TestAdapter; @RunWith(Suite.class) 四、多线程测试
public class JavaTest {
private int param;
private int param2;
private int result;
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 org.junit.runner.RunWith;
import org.junit.runners.Suite;
@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来开发我们自己的测试了。
发表评论
-
Bugzilla 中文手册
2012-08-21 10:22 18891Bugzilla 是一个开源的缺陷跟踪系统(Bug ... -
(zz) Web Service 测试方法
2012-07-12 17:29 16711.WebService简介 WebService ... -
测试Servlet(转)
2012-06-10 18:31 943servlet的测试一般来说需 ... -
Rational Functional 测试命令接口
2012-05-17 13:26 860Functional Test Command-Line ... -
【原】JUNIT 源码分析之TestSuite
2012-04-25 21:59 1478Junit是如何使用适配器模式的呢?概念上可以理解,但 ... -
分享selenium+testng+reprotng+ant配置
2012-04-19 16:12 3499一、Configure1. 安装testNG插件到eclips ... -
[YUAN] JUNIT 源码分析总结
2012-04-11 15:21 979今天看了下Junit3的源码,记录下一些心得。 J ... -
【zz】Ant + Junit 实现自动化测试
2012-04-10 14:01 1962在软件开发过程中,我 ... -
关键字驱动测试的原理和概念
2012-04-09 13:45 1676原理及特点 1. ... -
LoadRunner安装及破解
2012-03-19 15:13 10451、去HP的官方网 ... -
Web测试的一些思路
2012-03-19 15:10 810WEB测试分为6个部分: ●功能测试 ● ... -
测中策 - Web自动化测试的策略
2012-03-13 17:01 895大不可量,深不可测&quo ... -
软件测试的思路
2012-02-26 21:08 837任何东西的测试与软 ... -
TC interview
2012-02-21 11:34 9721. 自我介绍 2. 工作内容,完成过的具体项目及职责 3 ... -
RFT中文操作指南(下)
2011-04-02 15:05 1281练习 1.6:回归测试 在 ... -
RFT中文操作指南(上)
2011-04-02 15:03 1009练习 1.1:设置 Functional Test IB ... -
理解自动化测试
2011-04-02 11:06 1630“自动化测试”有时也叫“测试自动化”,由两部分组成,“自动化” ... -
一个纸杯子的测试用例
2010-10-26 11:52 1165一个纸杯,我们能想出多少个测试用例呢?想必很多人 ... -
测试一个搜索框
2010-10-26 11:51 1574摸索中,还很不成熟,但愿能抛砖引玉吧,我做的搜索测试是来抓取百 ... -
测试用例编写的“侯式标准”
2010-10-26 11:51 1436作为软件测试人员 ...
相关推荐
JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写。
junit4教程(《Junit4初探》)
Junit4使用教程详解+源码下载.rar
Junit 3.8 详解 解压后生成.exe文件,可直接播放。
单元测试又称模块测试,是针对软件设计的最小单位 ─ 程序模块(对象),进行正确性检验的测试工作。其目的在于发现各模块内部可能存在的各种差错。基于面向面向对象我们测试的对象就是类的实例。...
Junit 类包详解
JUnit4 主要目标便是利用Java5 的Annotation 特性简化测试用例的编写
浪曦][原创]Junit.3.8.详解续二.rar
我自己粗略的写了一下JUnit和android里面对JUnit的应用,因为没有太多时间整理,所以很粗略,等有时间再好好整理一下,见笑了。
junit3.8jar以及源码以及测试案例详解下载
jUnit测试框架入门详解(加强版)
此文档 详细介绍了JUnit4 和 3的主要区别,进行了实例详解!可以作为面试备用资料!
不错的JUnit源代码学习资料
主要介绍了SSM框架中测试单元的使用 spring整合Junit过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
包括JUnit.in.Action中文版.pdf,JUnit详解.pdf,Manning - JUnit in Action.pdf,单元测试之道Java版:使用JUnit.pdf以及Junit设计模式分析(Junit设计模式分析.pdf及源码实例),是学习JUnit不可多得的资料。
JUnit 是一个流行的 Java 单元测试框架,用于编写和运行单元测试。它提供了一组注解和断言方法,使得编写、运行和验证测试变得简单和方便。
浪曦][原创]Junit.3.8.详解续一.rar
主要介绍了Junit写法及与spring整合过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了SpringBoot 单元测试JUnit的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了Spring整合Junit的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧