`

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详细教程

    因 jdk5 中的新特性,JUnit4 也因此有了很大的改变。下面详细介绍 JUnit4 的使用方法,只是举个例子说明junit4 的使用

    Junit4教程非常详尽

    JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写。

    junit 4测试框架培训资料

    详细介绍了junit4测试框架的使用和特性

    追求代码质量:Junit4与TestNG的对比

    本文介绍了JUnit 4并不是第一个提供基于注释的灵活模型的Java:trade_mark:测试框架。...本文还讨论TestNG不同于JUnit 4的一些特性,并提议采用一些方法,使得这两个框架能继续互相补充,而不是互相竞争。

    junit4测试数据库源码

    包涵了junit4新特性assertThat断言和mysql,oracle俩种数据库的增删改查测试

    JUnit 4 抢先看.doc

    JUnit 4 是该库三年以来最具里程碑意义的一次发布。它的新特性主要是通过采用 Java 5 中的标记(annotation)而不是利用子类、反射或命名机制来识别测试,从而简化测试。在本文中,执着的代码测试人员 Elliotte ...

    JUnit4详解

    JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写。

    JUnit4学习笔记

    JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写。 先简单解释一下什么是Annotation,这个单词一般是翻译成元数据。元数据是什么?元数据就是描述数据的数据。也...

    Junit4教程

    Junit4教程 关于junit4的新特性,我把自己验证过的,感兴趣的,且有用的新特性都写在这里了。

    单元测试利器JUnit4

    本文内容包括:引言JUnit4初体验JUnit深入JUnit和Ant总结本文主要介绍了如何使用JUnit4提供的各种功能开展有效的单元测试,并通过一个实例演示了如何使用Ant执行自动化的单元测试。本文假设读者对Eclipse下进行Java...

    JUnit4单元测试入门详解.pdf

    JUnit4 主要目标便是利用Java5 的Annotation 特性简化测试用例的编写

    JUnit使用指南及作业规范.rar

    JUNIT 4.X4.X4.X使用 .... .... .... ......... 12 下载与安装 下载与安装 .... .... .... ...... 12 使用方法 .... .... .... .......... 13 与 3.x版本的异同 (看谁更简单) (看谁更简单) .... .... .... 13...

    扩展JUnit4以促进测试驱动开发

    内容实际Java开发中单元测试常遇到的问题JUnit4的新特性和扩展机制JUnit4扩展的实现通过测试用例实例展示JUnit扩展的执行效果结论参考资料简介: 在采用测试驱动开发的项目中,有一个经常困扰开发者的问题是:当...

    test.junit-4.5.jar和test.junit-4.5-sources.jar

    JUnit 4是三年以来最具里程碑意义的一次发布。它的新特性主要是针对JAVA5中的标记(annotation)来简化测试,而不是利用子类、反射或命名机制。本文将讲述如何使用JUnit 4,当前前提是你最好具有JUnit的使用经验.

    junit 测试工具

    JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成... 4、图形和文本的测试运行器

    junit-3.8.1.zip

    junit-3.8.1,JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性: 1、用于测试期望结果的断言(Assertion) 2、用于...

    探索 JUnit 4.4 新特性

    NULL 博文链接:https://vb2005xu.iteye.com/blog/1273025

    junit 使用手册

    Junit是一个开源的单元测试框架。由于编写可重复使用的测试代码。它是单元测试框架xUnit的一个实例。Junit4中更是增加了注解这个新的特性,使编写测试程序更容易。

    Mockito+Junit5测试方法实践

    内容概要:参考Mockito官方API文档,实践框架每个特性。 适合人群:Mockito入门人员以及想全面...能学到什么:“Mockito 4.6.0 + Junit 5”的组合编程。 使用建议:使用前安装好Maven及Java即可,推荐使用VSCode编辑。

Global site tag (gtag.js) - Google Analytics