今天突然很想写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是Java编程领域中一个非常重要的单元测试框架,它允许开发者对他们的代码进行自动化测试,确保代码的功能正确性。这个完整的jar包包含了Junit4.7的所有类和方法,使得开发者可以直接在项目中引用,进行单元...
JUnit 4.7是这个框架的一个版本,提供了许多增强的功能和改进,使得测试更加灵活和高效。 JUnit的核心概念是测试用例(Test Case),它是测试特定功能或方法的一组相关断言(Assertion)。在JUnit 4.7中,你可以...
JUnit 4.7 是一个广泛使用的Java编程语言的单元测试框架。这个版本是JUnit系列中的一个重要里程碑,它为开发者提供了一套强大而灵活的工具,用于编写和执行测试用例,确保代码的质量和稳定性。在Java开发过程中,...
JUnit 4.7 是一个流行的开源测试框架,主要用于编写和执行Java程序的单元测试。它在软件开发过程中扮演着至关重要的角色,确保代码的质量和稳定性。这个版本的JUnit是在JUnit 4系列的一个更新,带来了许多改进和新...
文件名`junit4.7-SNAPSHOT-20090511-2347`可能指的是JUnit 4.7的一个快照版本,其中`SNAPSHOT`通常表示这是一个开发中的不稳定版本,`20090511-2347`可能是该版本的构建日期和时间。在实际开发中,为了确保稳定性,...
JUnit 4.7 是一个广泛使用的Java编程语言的单元测试框架,它极大地简化了软件开发中的测试过程。这个版本是JUnit系列的一个重要迭代,引入了许多改进和新特性,旨在提高测试的效率和覆盖率。让我们深入了解一下JUnit...
- **注解(Annotations)**:JUnit 4.7引入了注解,如`@Test`、`@Before`、`@After`等,用于标记测试方法和设置方法,使得测试代码更加简洁。 - **参数化测试**:允许使用不同的参数运行同一测试方法,增强了测试...
总的来说,JUnit 4.7是一个强大的单元测试框架,它的特性包括但不限于:注解驱动的测试、可忽略的测试用例、参数化测试、丰富的断言库以及自定义测试运行器。它极大地简化了Java开发中的测试流程,提高了软件的质量...
总的来说,JUnit 4.7作为Java单元测试的重要工具,其易用性和灵活性极大地促进了测试驱动开发(TDD)和持续集成(CI)的实践。通过编写单元测试,开发人员可以提高代码质量,减少调试时间,同时也有助于团队间的协作...
《深入理解JUnit 4.7:Java开发中的单元测试利器》 JUnit是Java开发者进行单元测试最常用的工具之一,尤其在版本4.7中,它提供了丰富的功能和改进,使得测试更加高效、易于理解和维护。本文将深入探讨JUnit 4.7的...
1. **注解(Annotations)**:JUnit 4.7 引入了注解来声明测试方法,比如 `@Test` 注解标记测试方法,`@Before` 和 `@After` 注解用于在每个测试方法之前和之后执行特定的代码(通常用作设置和清理工作)。...
在本篇中,我们将详细探讨JUnit 4.8.2和4.7这两个版本,以及它们在测试过程中的应用。 首先,JUnit 4.8.2是JUnit系列的一个稳定版本,相较于早期的4.7版本,它可能包含了修复的bug、性能改进和新的特性。在JUnit 4....
2. **参数化测试**:通过`@Parameters`注解,JUnit 4.7允许创建参数化的测试用例,可以为同一个测试方法提供多组输入数据,从而测试不同的场景。 3. **断言增强**:除了基本的`assertEquals`和`assertTrue`,JUnit ...
junit-4.7.jar 用于java测试的包
JUnit 4.7 和 Hamcrest-Core-1.3 是两个重要的Java单元测试工具,它们在软件开发过程中扮演着至关重要的角色。JUnit 是一个开源的、基于Java的单元测试框架,而Hamcrest是一个匹配器库,提供了丰富的断言方法,使得...
总的来说,这个"junit4.7-SNAPSHOT-20090511-2347.jar"文件是Java开发人员进行单元测试的重要工具,它的使用可以帮助开发者编写可靠的代码,确保代码的功能正确无误。虽然这个版本是快照版本,但仍然包含了JUnit 4...
深圳电信培训中心徐海蛟老师上课用的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学习(十)——Spring与Hibernate整合的单元测试》中,我们将探讨如何在Java开发中,利用JUnit进行Spring和Hibernate框架的集成测试。单元测试是软件开发中的重要环节,它能帮助开发者确保代码的质量和...