阅读本系列文章时须要知道的:

JUnit是由GOF 之中的一个的Erich Gamma和 Kent Beck 编写的一个开源的单元測试框架,分析JUnit源码的主要目的是学习当中对设计模式的运用。JUnit也是一个研究怎样应对版本号升级和接口变化的案例。

链接1:源码分析

JUnit4.8.2源码分析-1单元測试类

JUnit4.8.2源码分析-2 Request和Description

JUnit4.8.2源码分析-3 TestClass 和RunnerBuilder

JUnit4.8.2源码分析-4 RunNotifier与RunListener

JUnit4.8.2源码分析-1说明

JUnit4.8.2源码分析-1说明

JUnit4.8.2源码分析-1说明

JUnit4.8.2源码分析-1说明

链接2:使用JUnit的样例

1.JUnit4.8.2源码问题

因为yqj2065下载和使用的BlueJ所集成的版本号是JUnit4.8.2。所以就分析一下JUnit4.8.2的源码(CSDN下载)。解压后将它们导入BlueJ;编译它们时BlueJ会警告编译的类已经在BlueJ的库中,编译后使用的还将是库中的类,于是熟悉了的类我们能够在BlueJ中删除(反正我也不准备打包替代库中的JUnit)。

某些JUnit类型,看完了并且不准备回头再看时。yqj2065会在BlueJ中将它删除——每删除一个表示自己又前进了一点。删除如NullBuilder时,将import
org.junit.internal.builders.NullBuilder加到本包的它的客户类中(其它包使用的。是BlueJ库中引入的包文件里的类)。以保证整个项目能够编译和生成JavaDoc。

在本系列文章中。大多数情况我不会把JUnit4.8.2源码粘贴出来,读者应该有自己的拷贝,或者看这里http://www.docjar.com/projects/JUnit-4.7-code.html

2.熟悉JUnit的使用吗?

阅读源码。必须知道该框架的设计需求。假设精通JUnit。单元測试的需求应该较熟悉。大多数人如我。仅仅是简单地使用JUnit。

所以。有一些怎样使用JUnit的内容须要学习。

这里先从简单的样例入手。说明myTest包中程序的组织。

①应用程序/业务类(待測试的目标类)HelloWorld。能够在HelloWorld的类体中用main直接測试。TestHelloWorld演示了直接測试和模拟JUnit4的基本步骤的測试,见Java Annotation 提要

②为了使用JUnit4測试它,须要设计一个单元測试类HelloWorldTest。当然。单元測试类在IDE如BlueJ中。我们不须要写程序。

package myTest;//myTest.units
public class HelloWorld {
public double add(double m,double n){
return m+n;
}
public double add2(double m,double n){
return m+n;
}
}
package myTest;
import org.junit.Test;//@Test
import static org.junit.Assert.*;//assertEquals
public class Unit0{
@Test
public void add(){
HelloWorld h = new HelloWorld();
assertEquals(7.0, h.add(1, 2), 0.1);
}
}

单元測试类TestInJUnit4则是手工敲的代码,单元測试类图标为暗绿色,能够直接运行其@Test方法。

JUnit将处理的是单元測试类。@Test等标注/Annotation定义一项測试。

JUnit通过反射解析RUNTIME标注

单元測试类的一个測试是一个public void 方法

③为了验证JUnit4.8.2源码,我们能够直接编写XxxUnit单元測试类(包括各种标注)。而验证代码通常取名<JUnit class name>Demo,如RequestDemo。

3.单元測试类

编写单元測试类时,最经常使用的是各种标注、org.junit.Assert、Assume;须要提供很多其它代码的測试,请參考:

JUnit4.8.2的标注列举例如以下。

@Test标注的源码

package org.junit;
import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Test {
/**
* Default empty exception
*/
static class None extends Throwable {
private static final long serialVersionUID= 1L;
private None() {
}
} /**
* Optionally specify <code>expected</code>, a Throwable, to cause a test method to succeed iff
* an exception of the specified class is thrown by the method.
*/
Class<? extends Throwable> expected() default None.class; /**
* Optionally specify <code>timeout</code> in milliseconds to cause a test method to fail if it
* takes longer than that number of milliseconds.*/
long timeout() default 0L;
}

org.junit.Ignore @Target({ElementType.METHOD, ElementType.TYPE})

@Before和@After标示的方法仅仅能各有一个。代替了JUnit曾经版本号中的setUp和tearDown方法

org.junit.BeforeClass @Target(ElementType.METHOD)

org.junit.Before @Target(ElementType.METHOD)

org.junit.AfterClass @Target(ElementType.METHOD)

org.junit.After @Target(ElementType.METHOD)

org.junit.Rule

org.junit.runner.RunWith @Target(ElementType.TYPE),使用指定Runner执行測试。默认的Runner为org.junit.runners.JUnit4。

org.junit.runners.Suite.SuiteClasses @Target(ElementType.TYPE)。将全部须要执行的測试类组成组/ Suite。一次性的执行以方便測试工作。

org.junit.runners.Parameterized.Parameters @Target(ElementType.METHOD),參数化測试

org.junit.experimental.theories.suppliers. TestedOn

org.junit.experimental.theories. DataPoint

org.junit.experimental.theories.DataPoints

org.junit.experimental.theories.ParametersSuppliedBy

org.junit.experimental.theories.Theory

org.junit.experimental.categories.Categories.ExcludeCategory

org.junit.experimental.categories.Categories.IncludeCategory

org.junit.experimental.categories.Category

JUnit4.8.2源码分析-1 说明的更多相关文章

  1. JUnit4.8.2源码分析-4 RunNotifier与RunListener

    JUnit4运行过程中,org.junit.runner.notification. RunListener和RunNotifier运用了观察者模式. 1.观察者 观察者Observer/Listen ...

  2. 【JUnit4.10源码分析】5 Statement

    假设要评选JUnit中最最重要的类型.或者说核心,无疑是org.junit.runners.model.Statement.Runner等类型看起来热闹而已. package org.junit.ru ...

  3. JUnit4.12 源码分析之TestClass

    1. TestClass // 源码:org.junit.runners.model.TestClass // 该方法主要提供方法校验和注解搜索 public class TestClass impl ...

  4. 【JUnit4.10源码分析】6.1 排序和过滤

    abstract class ParentRunner<T> extends Runner implements Filterable,Sortable 本节介绍排序和过滤. (尽管JUn ...

  5. JUnit源码分析 - 扩展 - 自定义Rule

    JUnit Rule简述 Rule是JUnit 4.7之后新加入的特性,有点类似于拦截器,可以在测试类或测试方法执行前后添加额外的处理,本质上是对@BeforeClass, @AfterClass, ...

  6. JUnit源码分析 - 扩展 - 自定义RunListener

    RunListener简述 JUnit4中的RunListener类用来监听测试执行的各个阶段,由RunNotifier通知测试去运行.RunListener与RunNotifier之间的协作应用的是 ...

  7. 【异常及源码分析】org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping

    一.异常出现的场景 1)异常出现的SQL @Select("SELECT\n" + " id,discount_type ,min_charge, ${cardFee} ...

  8. Junit 3.8.1 源码分析(一)

    写在前面:本文基于Junit3.8.1版本,因为这是我第一次进行源码学习,先从简单的源码开始学起 1. 示例代码 1.1 准备工作 下载Junit3.8.1的JAR包 需要下载junit-3.8.1- ...

  9. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

随机推荐

  1. 理解OCI(Open Container Initiative)及docker的OCI实现(转)

    OCI定义了容器运行时标准,runC是Docker按照开放容器格式标准(OCF, Open Container Format)制定的一种具体实现. runC是从Docker的libcontainer中 ...

  2. [BZOJ2006] [NOI2010]超级钢琴 主席树+贪心+优先队列

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 3591  Solved: 1780[Submit][Statu ...

  3. (3)三剑客之sed

    (1)基本介绍 1) 工作流程:sed每次处理一行内容,处理时,把当前处理的行存储在临时缓存区,称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,直到内容处理完毕2 ...

  4. python os用法精简版

    import os print(os.getcwd()) #返回当前路径,无参数 print(os.listdir('E:\zsfile')) #该路径下所有文件名 os.remove('E:\zsf ...

  5. EasyUI中combobox的代码实例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. [jquery] 删除文章的时候弹出确认窗口

    [<a href="{:U(GROUP_NAME . '/Category/delCate')}/id/{$v.id}" onclick='return del();'> ...

  7. 某dalao贼快的hash?

    #include<map> #include<cstdio> #include<iostream> #include<ext/pb_ds/assoc_cont ...

  8. [BZOJ4316]小C的独立集(圆方树DP)

    题意:求仙人掌图直径. 算法:建出仙人掌圆方树,对于圆点直接做普通的树上DP(忽略方点儿子),方点做环上DP并将值直接赋给父亲. 建图时有一个很好的性质,就是一个方点在邻接表里的点的顺序正好就是从环的 ...

  9. 【神奇の做法】bzoj2456 mode

    题解:http://www.tuicool.com/articles/BfQBzif #include<cstdio> using namespace std; int n,x,ans,t ...

  10. elasticsearch将数据导出json文件【使用elasticdump】

    1.前提准备 需要使用npm安装,还未安装的朋友可以阅读另一篇我的博客<安装使用npm>,windows环境. 2.安装es-dump 打开终端窗口PowerShell或者cmd. 输入命 ...