zoukankan      html  css  js  c++  java
  • junit3对比junit4


    本文内容摘自junit实战,感谢作者的无私奉献。

    个人觉得每个开源包的版本对比意义不大,闲来无事,这里就来整理一下好了。本文名为junit3对比junit4,但是我通过这篇博客主要也是想统一的来整理下junit4的一些功能。OK,不废话了,现在我们开始:

    1,版本的向前兼容和向后兼容

    所有的junit4测试执行器runner都能够执行junit3测试,代码不需要进行任何修改。但是使用junit3的测试执行器想要运行junit4的测试那怎么办呢?

    也就是说:junit4不存在向后兼容,但是junit3的向前兼容如何呢?考虑如下情景,我们使用ant或者maven来管理我们的项目,所以这个时候junit3绝对有必要向前兼容junit4系列。

    伟大的junit肯定帮我们解决了呢,使用一个适配器就OK,代码如下:

    package org.linkinpark.junit.testjunit;
    
    import junit.framework.JUnit4TestAdapter;
    import junit.framework.Test;
    import junit.framework.TestCase;
    
    public class LinkinTest extends TestCase
    {
    
    	public static Test suite()
    	{
    		return new JUnit4TestAdapter(LinkinTest.class);
    	}
    
    }
    

    上面的代码很简单,我们自己写的junit4的测试,只需要初始化一个Junit4TestAdapter类就可以转换成junit3的测试了。

    关于源码包结构:

    前面的文章我也已经说过了,junit4完美的使用builer设计模式来向后兼容了juint3的版本,查看过junit的源码就知道,以前的junit3的版本所有的测试都放在了junit.framework结构下,新的junit4的版本在原来的基础上,新增org.junit包来包含所有的新的功能。


    2,注解取代约定

    junit4测试类不需要继承TestCase类,而且测试方法也不需要强制命名成testXXX这种格式。取而代之的就是使用@Test注解就OK了。

    @Before,@After,@BeforeClass,@AfterClass也很好的取代了之前的setUp()方法和tearDown()方法。

    温馨提示:我们应该养成良好的编码习惯,所以我们在写测试类的时候向后兼容性的来命名。比如Linkin类有一个add()方法,那么我们写测试类的时候就在LinkinTest测试类中写一个testAdd()测试方法。

    然后也用@Before注解来修饰setUp(),用@After注解来修饰tearDown()方法,然后用@BeforeClass注解来修饰init()方法,用@AfterClass注解来修饰destroy()方法。


    3,忽略测试,异常测试,超时测试

    junit4强化了很多junit3的功能,比如忽略测试,异常测试,超时测试等等。

    我们可以使用@ingore注解来修饰方法和类,表示跳过测试

    我们可以使用@Test注解的一个属性,Except来测试异常

    我们可以使用@Test注解的一个属性,timeout来测试超时


    4,静态导入

    Java5之后增强的静态导入在代码的阅读性上个人觉得反而不怎么舒服了,但是我们还是应该养成良好的习惯,在重复的类方法调用中使用静态导入类方法。

    我们使用静态导入org.junit.Assert.*,方便我们直接使用Assert类中的各种断言

    我们使用静态导入org.hamcrest.Matchers.*,方法我们使用hamcrest中的各种断言


    5,测试集,参数化测试

    junit4新增测试集注解,我们可以使用@RunWith注解来选择测试执行器。

    我们可以使用Suite类来运行测试集,配合@SuiteClass一起使用

    我们可以使用Parameterized类来运行多组测试,配合@Parameters一起使用


    6,新增加的断言

    junit4新增了几个断言,完美的方便了我们对数组,对双精度值的测试。

    比如下面的测试方法:

     public static void assertArrayEquals(Object[] expecteds, Object[] actuals) {
            assertArrayEquals(null, expecteds, actuals);
        }
    public static void assertArrayEquals(String message, Object[] expecteds,
                Object[] actuals) throws ArrayComparisonFailure {
            internalArrayEquals(message, expecteds, actuals);
        }
    static public void assertEquals(String message, double expected,
                double actual, double delta) {
            if (doubleIsDifferent(expected, actual, delta)) {
                failNotEquals(message, Double.valueOf(expected), Double.valueOf(actual));
            }
        }

    OK,就先整理到这里,以后我们直接使用junit4.12就够了,过几天我会自己写一套web框架,使用maven来管理项目,除了junit的依赖以外还有hamcrest的依赖,主要是想使用hamcrest的逻辑断言,比如is,not,allOf,anyOf。下面是该这个2依赖的pom文件:

    <dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.12</version>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.hamcrest</groupId>
    			<artifactId>hamcrest-junit</artifactId>
    			<version>2.0.0.0</version>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>

  • 相关阅读:
    Python生成器
    Python迭代器
    模块
    列表推倒式
    内置函数 lambda表达式
    函数
    global、nonlocal、迭代器
    练习
    编码数组字典
    字典
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5232867.html
Copyright © 2011-2022 走看看