`

Junit4特性

阅读更多
Junit4更新的版本很多,现在已经更新到4.7了。发生的变化也相当的明显,为了更好的使用测试,有必要去学习一下其新的功能。
总的来说,其变化还是比较多的,下面列举一些改变之处:
1. 测试由原来的命名模式改变注解,即testXXX变为@Test。其中@Test还提供了额外的属性。如expected,表示期望抛出的异常,用法如下:

@Test(expected = NullPointerException.class)
	public void unsupportedDBCheck() {
		throw new NullPointerException();
	}

由于上面得到期望抛出的异常,所以测试通过。
2. 数组比较改用Assert.assertArrayEquals
3. 套件测试也用注解替换,如下如示:

@RunWith(Suite.class)
@SuiteClasses({
	Hello.class,
	TheoryTest.class
})
public class SuiteClassesTest {

}


4. 通过@Ignore,可以忽略某个方法或整个类的测试
5. 增加了新特性-理论机制(Theory),这个特性听起来很迷惑人,作用是使得开发人员从开始的定义测试用例的阶段就可以通过参数集(理论上是无限个参数)对代码行为进行概括性的总结.开发人员都知道他们代码所想要实现的概括性的总的目的,理论使得他们只需要在一个地方就可以快速的指定这些目的,而不要将这些目的翻译成大量的独立的测试用例。用法如下所示:
@RunWith(Theories.class)
public class TheoryTest {

	@DataPoint public static String name ="theories";
	@DataPoint public static String password = "2009";
	
	@Theory
	public void outNameAndPassword(String name,String password){
		System.out.println("name="+name+" password="+password);
	}
}


输出为:

引用

name=theories password=theories
name=theories password=2009
name=2009 password=theories
name=2009 password=2009


也就是说,方法的参数与定义的字段会把所有的组合情况全部考虑进去,虽然用到此特性的地方不多,但有时的确很有用。这样也不用逐个写断言语句,把测试数据集中在一个地方,方便管理。
6. 提供了新的特性-假设机制(Assumption).此特性使用了Hamcrest库的类.本来Hamcrest是一个单独的测试组件,Junit也集成了一部分,但是并没有完全包含。建议使用junit独立的JAR文件,再单独引入hamcrest包。
其实hamcrest的功能相当的强大,理解起来也非常的容易,是一个很不错的组件。不过好像并没发现其参考文档。它提供assertThat,assumeThat,assumeNotNull等假设语句,也提供is,not,both..and,either..or等用法,非常的灵活。如:
//断言"yy"不等于"xx"
assertThat("yy", is(not("xx")));
//abcdefg包含adcd或fsd
assertThat("abcdefg",anyOf(containsString("abcd"),containsString("fsd")));

其中assumeXXX的目的为,假设此条件成立,才执行后面的语句,否则跳出些测试方法,继续执行其它的测试。如:

//如果此假设语句不成立,则不会打印出this is assume
Assume.assumeThat(4,both(lessThanOrEqualTo(6)).and(greaterThan(3)));
System.out.println("this is assume");

7. @Before,@After,@BeforeClass,@AfterClass.这几个注解一看便知大概,@Before表示每个测试方法执行前执行一次,而@BeforeClass表示整个类测试前执行一次。不过需要注意的是,@BeforeClass,@AtferClass注解的方法必须是静态的。

8. Junit提供了新的核心运行类MaxCore,相对于以前的JunitCore运行机制,这个类有一系列的优点,如从未测试过的方法优先测试,剩下的测试中,以前测试失败的方法优先测试,再其次,运行快的优先于运行慢的方法。用法如官方例子如示:
public static class TwoUnEqualTests {
    @Test
    public void slow() throws InterruptedException {
        Thread.sleep(100);
        fail();
    }
    @Test
    public void fast() {
        fail();
    }
}

@Test
public void rememberOldRuns() {
    File maxFile = new File("history.max");
    MaxCore firstMax = MaxCore.storedLocally(maxFile);
    firstMax.run(TwoUnEqualTests.class);

    MaxCore useHistory= MaxCore.storedLocally(maxFile);
    List<Failure> failures= useHistory.run(TwoUnEqualTests.class)
            .getFailures();
    assertEquals("fast", failures.get(0).getDescription().getMethodName());
    assertEquals("slow", failures.get(1).getDescription().getMethodName());
}

当然这个替代也是相对的,有时候还是可以继续用JUnitCore,MaxCore只是在JUnitCore基础上增加优先测试之类的规则,但是有些功能还是需要用JUnitCore。比如说,如果想在eclipse中不通过junit插件来运行单元测试,就需要JUnitCore:
public class ObjectToClassTest {

	@Test
	public void ObjectTest(){
		int[] a={1,2};
		int[] b={1,2};
		Assert.assertArrayEquals(a,b);
	}
	public static void main(String[] args){
		JUnitCore.main("com.junit.ObjectToClassTest");
	}
}

当然这种方式针对的是类,不能限制到方法上,如果有多个类,只需要用空格把类隔开即可。

上面基本包含了Junit4.6之前的新特性,至于以后的新特性,会花专门的篇幅来讲解。
2
0
分享到:
评论

相关推荐

    单元测试利器JUnit4

    通过理解和熟练运用这些JUnit4特性,你可以构建出一套健壮且易于维护的单元测试体系,提高软件开发的质量和效率。阅读《单元测试利器JUnit4.pdf》文档将更深入地理解这些概念,并提供实践指导。

    JUnit 4测试驱动开发----junit技术讲解

    本文将深入讲解JUnit 4的关键特性和如何进行测试驱动开发。 1. 预备知识 在开始使用JUnit 4进行测试之前,了解一些预备知识是必要的。例如,Java 5引入的可变长参数(Variable-Length Arguments)允许函数接收不定...

    myeclipse测试工具junit4

    JUnit4是对早期JUnit版本的重大升级,引入了许多新特性,如注解(Annotation)、参数化测试、断言改进等。它使得测试代码更加简洁、易于阅读和维护。与传统的基于继承的测试模型不同,JUnit4采用注解的方式来标识...

    Junit4 basic concept

    JUnit4是JUnit框架的一个重要版本,相较于之前的版本,它引入了许多新特性,如注解(Annotations)、参数化测试等,这些特性极大地简化了测试代码的编写过程,提高了测试的灵活性和可读性。 #### 二、概念介绍 ###...

    junit4 jar包

    JUnit4还支持测试套件(`@RunWith(Suite.class)`)、参数化测试(`@Parameters`)、定时器(`@Test(timeout = XXX)`)和假设(`Assume`类)等高级特性,这些都极大地增强了测试的灵活性和覆盖率。此外,JUnit4可以与...

    junit4学习文档

    JUnit4 是 JUnit 测试框架的一个重大更新版本,它充分利用了 Java 5 的注解(Annotation)特性来简化测试用例的编写过程。注解是一种元数据,用于描述程序中的元素如类、方法或变量的作用。与传统的关键字(如 ...

    JUnit4JUnit4JUnit4(文档)

    JUnit4引入了许多改进和新特性,极大地提升了测试的灵活性和效率。下面将详细介绍JUnit4的关键概念、特性以及如何使用。 1. **注解驱动**: JUnit4的核心变化之一就是引入了注解,这使得测试类和方法的声明更加...

    junit4教程(《Junit4初探》)

    本教程将深入浅出地介绍JUnit4的基本概念、核心特性以及如何在实际项目中应用它来编写有效的单元测试。 ## 一、JUnit4简介 JUnit4是JUnit系列的第四代产品,它引入了注解(Annotations)和断言(Assertions)等新...

    Junit4教程非常详尽

    JUnit4 是 JUnit 框架有史以来的最大改进,其主要目标便是利用 Java5 的 Annotation 特性简化测试用例的编写。下面是对 JUnit4 的详细介绍: 一、Annotation 简介 Annotation 是 Java5 中引入的一种元数据特性,...

    Junit4简单实用

    总结来说,JUnit4 是对 JUnit3 的一个重要升级,它利用 Java 5 的注解特性极大地简化了测试用例的编写,提高了测试代码的可读性和可维护性。通过使用注解,开发者能够更自由地组织测试逻辑,同时也能够方便地扩展...

    Junit4.zip

    本文将深入探讨JUnit4的核心特性、使用方法以及如何将其应用到实际项目中。 首先,我们要明白单元测试的重要性。在软件开发过程中,单元测试是确保代码质量的第一道防线,它能够帮助开发者尽早发现和修复问题,提高...

    Junit4电子教程 api

    JUnit4相比其前身JUnit3,引入了许多改进和新特性,使得测试更加灵活和强大。 1. **注解驱动测试**:JUnit4放弃了传统的继承Test类的方式,而是采用注解(@Test)来标记测试方法,使得测试类结构更加清晰,易于理解...

    Junit4 jar包

    Junit4是由Eclipse基金会维护的一个开源项目,它是JUnit系列的第四个主要版本,相比于之前的版本,Junit4引入了许多新的特性和改进。它支持注解(Annotation-based)的测试,使得编写和组织测试代码变得更加简洁。...

    Junit4所需jar包

    1. **JUnit4的特性**: - **注解驱动**:JUnit4引入了注解(如`@Test`、`@Before`、`@After`等),使测试类和方法的编写更加简洁。 - **异常断言**:测试方法抛出预期的异常时,可以使用`@Test(expected = ...

    junit4单元测试

    异常测试也是JUnit4的一个重要特性。你可以使用`@Test(expected = Exception.class)`注解来指定期望的异常类型,如果测试方法没有抛出该异常或者抛出了不同的异常,那么测试就会失败。 JUnit4还包括了对测试的分类...

    JUnit4.rar(ppt讲义)

    相比JUnit 3,JUnit 4引入了许多新特性,如注解(Annotations)、参数化测试、规则(Rules)等。注解简化了测试类的创建,例如`@Test`用于标记测试方法,`@Before`和`@After`则用于定义在每个测试方法执行前后的设置...

    junit3.8 和junit4 api

    4. **测试套件(Test Suites)**:通过`@Suite`注解创建,但这是JUnit 4的特性。在JUnit 3中,测试套件是通过`TestSuite`类构建的。 5. **分类(Categories)**:在JUnit 4中引入,用于组织和筛选测试,但JUnit 3...

    Junit4教程.pdf

    Junit4是该框架的一个重大更新,它引入了许多新特性,显著地简化了测试代码的编写,使得测试更加直观和高效。本文将详细探讨JUnit4的主要改进和关键知识点。 1. **Annotation的引入**: - 在JUnit4中,核心的改变...

    在Eclipse中使用JUnit4进行单元测试

    在Eclipse中使用JUnit4进行单元测试是一种常见的Java开发实践,它可以帮助开发者确保代码的正确性和稳定性。...通过熟练掌握JUnit4的各种特性,开发者可以编写出强大且易于维护的测试代码,为项目的成功奠定坚实基础。

Global site tag (gtag.js) - Google Analytics