`
jgnan
  • 浏览: 88909 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JUnit 4.7学习笔记(五)——测试引擎综述

阅读更多
今天突然很想写JUnit的学习笔记,所以找回以前的文章接着写了:
自从JUnit上升到4.1版本之后,开始全面支持JDK1.5的Annotation。另外也重写了它的测试引擎,实现了测试引擎的可定制话。当时给我一个全新的测试体验,从来没想过原来写测试用例也可以这么好玩。

先看下面的例子:
package com.amway.training.junit.runners;

import org.junit.runner.Description;
import org.junit.runner.Runner;
import org.junit.runner.notification.RunNotifier;

/**
 * A Demo Test Runner
 * @author JJ
 *
 */
public class DemoRunner extends Runner {
	/**
	 * 核心引擎要求每个Runner类必须有一个这样的构造函数
	 * @param testClass 测试类
	 */
	public DemoRunner(Class<?> testClass)
	{
	}
	
	@Override
	public Description getDescription() {
		return Description.EMPTY;
	}

	@Override
	public void run(RunNotifier notifier) {
		System.out.println("Hello, JUnit!");
	}

}


然后写一个测试:
package com.amway.training.junit;

import org.junit.runner.RunWith;

import com.amway.training.junit.runners.DemoRunner;

@RunWith(DemoRunner.class)
public class TestDemoRunner {

}


运行这个单元测试,你会发现我们执行了DemoRunner的Run方法。说明我们现在可以改变测试运行的行为。

看了一下,发现4.7的这部分还是和4.1的时候发生了不少变化。首先,现在多了一个ParentRunner的类,它把Runner类再重新封装了一轮,并且让新的默认引擎类都继承于它。

上面的这些类就是4.7的Runner引擎家族。Junit38ClassRunner旁支是为了向下兼容3.8版本的测试用例。

IgnoredClassRunner会在测试引擎核心探测到测试文件的class有定义@Ignore注解的时候自动调用,它会跳过当前测试类的运行:
package com.amway.training.junit.runners;

import org.junit.Ignore;
import org.junit.Test;

@Ignore
public class TestIgnoredRunner {

	@Test public void testMethod1()
	{
		System.out.println("Hello");
	}
}


上例执行后,发觉运行结果并未对testMethod1进行执行。


而对于这部分的封装JUnit是通过Request机制来完成的。关于Request的介绍我们会在日后介绍(遥遥无期,遥遥无期。。。 )。

然后ErrorReportingRunner是在org.junit.internal包里面的,一般不会直接调用而是由系统的核心引擎去调用,所以它里面没有注释。我们来看看其源码以进行Runner的进一步学习:

首先,看其直接实现Runner的两个抽象方法:
	@Override
	public Description getDescription() {
		Description description= Description.createSuiteDescription(fTestClass);
		for (Throwable each : fCauses)
			description.addChild(describeCause(each));
		return description;
	}

	@Override
	public void run(RunNotifier notifier) {
		for (Throwable each : fCauses)
			runCause(each, notifier);
	}


然后可以知道其核心方法应该是runCause(Throwable,RunNotifier)
        private void runCause(Throwable child, RunNotifier notifier) {
		Description description= describeCause(child);
		notifier.fireTestStarted(description);
		notifier.fireTestFailure(new Failure(description, child));
		notifier.fireTestFinished(description);
	}


从字面看,可以知道这个测试引擎的主要工作就是把异常转换为Failure测试结果显示。以下是一个使用的例子:
            try {
			Runner runner= fRequest.getRunner();
			fFilter.apply(runner);
			return runner;
		} catch (NoTestsRemainException e) {
			return new ErrorReportingRunner(Filter.class, new Exception(String
					.format("No tests found matching %s from %s", fFilter
							.describe(), fRequest.toString())));
		}


核心的BlockJUnit4ClassRunner就不说了,Theories会在日后说,因为这个模块是Junit开发团队用来做实验的,里面的东西不适宜用于生产,不过适宜拿来玩:)

今天到此为止,先开个头,下次再说ParentRunner及下面还没介绍到的子类(因为事忙,今天要写到这里了)
  • 大小: 19.5 KB
  • 大小: 119.9 KB
分享到:
评论

相关推荐

    junit4.7完整jar包

    Junit4.7是Java编程领域中一个非常重要的单元测试框架,它允许开发者对他们的代码进行自动化测试,确保代码的功能正确性。这个完整的jar包包含了Junit4.7的所有类和方法,使得开发者可以直接在项目中引用,进行单元...

    junit4.7及相关教程

    JUnit 4.7是这个框架的一个版本,提供了许多增强的功能和改进,使得测试更加灵活和高效。 JUnit的核心概念是测试用例(Test Case),它是测试特定功能或方法的一组相关断言(Assertion)。在JUnit 4.7中,你可以...

    Junit 4.7完整 全面jar包

    JUnit 4.7 是一个广泛使用的Java编程语言的单元测试框架。这个版本是JUnit系列中的一个重要里程碑,它为开发者提供了一套强大而灵活的工具,用于编写和执行测试用例,确保代码的质量和稳定性。在Java开发过程中,...

    junit4.7单元测试

    JUnit 4.7 是一个流行的开源测试框架,主要用于编写和执行Java程序的单元测试。它在软件开发过程中扮演着至关重要的角色,确保代码的质量和稳定性。这个版本的JUnit是在JUnit 4系列的一个更新,带来了许多改进和新...

    单元测试Junit 4.7

    文件名`junit4.7-SNAPSHOT-20090511-2347`可能指的是JUnit 4.7的一个快照版本,其中`SNAPSHOT`通常表示这是一个开发中的不稳定版本,`20090511-2347`可能是该版本的构建日期和时间。在实际开发中,为了确保稳定性,...

    junit4.7

    JUnit 4.7 是一个广泛使用的Java编程语言的单元测试框架,它极大地简化了软件开发中的测试过程。这个版本是JUnit系列的一个重要迭代,引入了许多改进和新特性,旨在提高测试的效率和覆盖率。让我们深入了解一下JUnit...

    junit4.7全套

    - **注解(Annotations)**:JUnit 4.7引入了注解,如`@Test`、`@Before`、`@After`等,用于标记测试方法和设置方法,使得测试代码更加简洁。 - **参数化测试**:允许使用不同的参数运行同一测试方法,增强了测试...

    junit-4.7.jar下载

    总的来说,JUnit 4.7是一个强大的单元测试框架,它的特性包括但不限于:注解驱动的测试、可忽略的测试用例、参数化测试、丰富的断言库以及自定义测试运行器。它极大地简化了Java开发中的测试流程,提高了软件的质量...

    Java单元测试JUnit4.7

    总的来说,JUnit 4.7作为Java单元测试的重要工具,其易用性和灵活性极大地促进了测试驱动开发(TDD)和持续集成(CI)的实践。通过编写单元测试,开发人员可以提高代码质量,减少调试时间,同时也有助于团队间的协作...

    junit4.7.zip

    《深入理解JUnit 4.7:Java开发中的单元测试利器》 JUnit是Java开发者进行单元测试最常用的工具之一,尤其在版本4.7中,它提供了丰富的功能和改进,使得测试更加高效、易于理解和维护。本文将深入探讨JUnit 4.7的...

    junit-4.7.jar+junit-4.7-src.jar

    1. **注解(Annotations)**:JUnit 4.7 引入了注解来声明测试方法,比如 `@Test` 注解标记测试方法,`@Before` 和 `@After` 注解用于在每个测试方法之前和之后执行特定的代码(通常用作设置和清理工作)。...

    Junit4.8.2(Junit4.7)

    在本篇中,我们将详细探讨JUnit 4.8.2和4.7这两个版本,以及它们在测试过程中的应用。 首先,JUnit 4.8.2是JUnit系列的一个稳定版本,相较于早期的4.7版本,它可能包含了修复的bug、性能改进和新的特性。在JUnit 4....

    junit-4.7.jar包

    2. **参数化测试**:通过`@Parameters`注解,JUnit 4.7允许创建参数化的测试用例,可以为同一个测试方法提供多组输入数据,从而测试不同的场景。 3. **断言增强**:除了基本的`assertEquals`和`assertTrue`,JUnit ...

    junit-4.7.jar

    junit-4.7.jar 用于java测试的包

    junit4.7以及hamcrest-core-1.3

    JUnit 4.7 和 Hamcrest-Core-1.3 是两个重要的Java单元测试工具,它们在软件开发过程中扮演着至关重要的角色。JUnit 是一个开源的、基于Java的单元测试框架,而Hamcrest是一个匹配器库,提供了丰富的断言方法,使得...

    junit4.7-SNAPSHOT-20090511-2347.rar

    总的来说,这个"junit4.7-SNAPSHOT-20090511-2347.jar"文件是Java开发人员进行单元测试的重要工具,它的使用可以帮助开发者编写可靠的代码,确保代码的功能正确无误。虽然这个版本是快照版本,但仍然包含了JUnit 4...

    junit 4.7 api chm 中文版

    深圳电信培训中心徐海蛟老师上课用的junit4.7 api chm 速查中文手册.吐血奉献o(∩_∩)o...哈哈

    junit-4.7-src.jar

    junit-4.7-src.jar junit-4.7-src.jar junit-4.7-src.jar junit-4.7-src.jar junit-4.7-src.jar junit-4.7-src.jar junit-4.7-src.jar

    junit学习(十)——Springpring与Hibernate整合的单元测试

    在本篇《junit学习(十)——Spring与Hibernate整合的单元测试》中,我们将探讨如何在Java开发中,利用JUnit进行Spring和Hibernate框架的集成测试。单元测试是软件开发中的重要环节,它能帮助开发者确保代码的质量和...

Global site tag (gtag.js) - Google Analytics