当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

JUnit 4 的一些新功能

发表于: 2007-11-26   作者:dongwei_6688   来源:转载   浏览次数:
摘要: 包结构的变化          在junit4中开始使用这样的包结构:org.junit.* ,而不再像以前使用这样的包结构:junit.framework.*,但是为了向后兼容,在Junit4中将会让这两种包结构并存 继承上的变化       &nbs

包结构的变化

         在junit4中开始使用这样的包结构:org.junit.* ,而不再像以前使用这样的包结构:junit.framework.*,但是为了向后兼容,在Junit4中将会让这两种包结构并存

继承上的变化

        你的测试类再也不需要extends这个类junit.framework.TestCase了,而且不用显示的继承任何一个类,Junit通过采用JDK 5.0的annotations特性来完成了这种转变。如果想要执行一个test case,只需要在你的测试类中至少包含一个这样的annotation就可以了@Test。
        打个比方,如果你写了这样的一个类,里面只包含了@Before 和 @After这样的annotation,却没有包含任何的@Test,那么在你开始运行这个测试类的时候,你会碰到一个java的异常:java.lang.Exception: No runnable methods.

断言方法的变化

         因为在Junit 4中,测试类不再继承TestCase(在这个类里JUnit 3.8版本中定义了assertEquals()等方法),所以你需要使用一个前缀的语法就像这样:Assert.assertEquals(),或者用JDK 5.0中的静态导入,来导入Assert,之后,你就可以像之前那样使用assertEquals等等这些方法了

        另外,在Junit 4中增加了两个新的断言方法,他们用来比较两个对象数组,如果两个数组中的每个元素都是equal的,那么就认为这两个数组是equal的:
    public static void assertEquals(String message, Object[] expecteds, Object[] actuals);
    public static void assertEquals(Object[] expecteds, Object[] actuals);

         还有12个assertEquals 方法已经因为JDK 5.0中的autoboxing功能而彻底消失了。像这样assertEquals(long, long) 之前在JUnit 3.8中使用的方法,现在已经都统一改用assertEquals(Object, Object)方法。

Fixture

        Fixtures是在测试期间用来初始化(initialize)和释放(release)对象的一些方法,在 In JUnit 3.8中,需要用setUp() 方法在运行测试方法之前进行一些初始化的工作,然后在测试完成之后用tearDown() 方法来进行善后工作。这两个方法都是从父类TestCase 中override过来的,因此他们的方法声明及方法名称是固定的。在JUnit 4中我们只要使用这两个annotation:@Before 和 @After 就可以达到同样的目的了,而且我们不用再强制的让方法必须叫这两个名字了。^_^

测试方法上的变化

          在JUnit 3.8中,用来标识一个测试方法是通过它的方法签名来实现的,即方法必须以一个"test"的前缀来命名,且必须为void,而且必须没有任何参数(比如:public void testDivide()),那些不遵循这种命名规则的方法将会被简单的忽略掉,而且不会抛出任何异常来表面已经发生了错误。

        在JUnit 4中就没有命名上的限制了,只需要在测试方法的签名加上一个这样的annotation就可以了:@Test,像之前的限制:方法必须为void,而且必须没有任何参数,这些还是一样需要,只是限制改为,如果没有遵守这些限制,则会在运行的时候抛出下面的异常:
     java.lang.Exception: Method xxx should have no parameters
     java.lang.Exception: Method xxx should be void
另外,@Test支持可选的expected参数,用来声明这个测试方法可以抛出一个异常,如果在测试时没有抛出异常,或者抛出了一个其他的异常,都会认为测试是失败的。比如可以这样来声明@Test(expected = ArithmeticException.class)。

忽略一个测试方法

         如果你在测试之前知道某个方法测试一定会失败,但是,你又不想让测试失败,那么你怎么临时的让这个测试方法被忽略掉呢?在JUnit 3.8中要么将这个方法注释掉,要么就需要改变方法名称,即不使用test前缀开头来命名方法,问题是当测试的方法很多时,你可能不记得你重命名过的这个方法了。而在JUnit 4中可以通过去掉方法前面的@Test annotation来达到目的,但是上面的问题依然存在,一个终极解决方案是:在需要测试的方法前/后即@Test的前面或者后面加上@Ignore 就可以了,最后在测试报告中将会显示出有多少方法被忽略掉了,同时会显示多少方法运行成功,以及多少方法运行失败。Note:@Ignore 有一个可选的参数,可以用它来简单的记录为什么这个方法被忽略掉了。

运行测试

         在JUnit 3.8中你可以有多种运行方式:text, AWT或者Swing,但是在JUnit 4中仅使用text方式。

JUnit 4 的一些新功能

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
首先我们编写一个Calc类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进
JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编写
JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测试用例的编
4 Junit4
转自http://blog.csdn.net/andycpp/archive/2006/10/09/1327147.aspx 我们在编写大型程序的时候,需
5 JUnit4
采用Annotation的JUnit 4已经不会霸道的要求你必须继承自TestCase了,而且测试方法也不必以test开头
什么是单元测试? 写了个类,要给别人用,会不会有Bug?怎么办?测试 用main方法测试好不好?不好 1
JUnit4概述 JUnit4是JUnit框架有史以来的最大改进,其主要目标便是利用Java5的Annotation特性简化测
1.Maven Dependency <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww
Fixture http://www.blogjava.net/relax/archive/2007/03/05/101945.html 何 谓 Fixture?它是指在
转:http://www.cnblogs.com/eggbucket/archive/2012/02/02/2335697.html JUnit4概述 JUnit4是JUnit
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号