JUnit4学习---转载
转载只因方便自己查看 原文地址http://www.hrmzone.cn/?p=588
?
?因jdk5中的新特性,JUnit4也因此有了很大的改变。确切的说,Junit4简直就不是3的扩展版本,而是一个全新的测试框架。下面详细介绍JUnit4的使用方法
1.测试方法:
?????在junit4之前,测试类通过继承TestCase类,并使用命名约束来定位测试,测试方法必须以“test”开头。Junit4中使用注释类识别:@Test,也不必约束测试方法的名字。当然,TestCase类仍然可以工作,只不过不用这么繁琐而已。
?????Junit中还因JDK5而增加了一项新特性,静态导入(static import)。
2.固件测试
?????所谓固件测试(Fixture),就是测试运行运行程序(test runner)会在测试方法之前自动初始化、和回收资源的工作。JUnit4之前是通过setUp、TearDown方法完成。在Junit4中,仍然可以在每个测试方法运行之前初始化字段,和配置环境,当然也是通过注释完成。Junit4中,通过@befroe替代setUp方法;@After替代tearDown方法。在一个测试类中,甚至可以使用多个@Before来注释多个方法,这些方法都是在每个测试之前运行。说明一点,@Before是在每个测试方法运行前均初始化一次,同理@Ater是在每个测试方法运行完毕后,均匀性一次就是说,经这两个注释的初始化和注销,可以保证各个测试之间的独立性而互不干扰,他的缺点是效率低。另外,不需要在朝类中显示调用初始化和清除方法,只要他们不被覆盖,测试运行程序将根据需要自动调用这些方法。超类中的@Before方法在自来的@Before方法之前调用(与构造函数调用顺序一致),@After方法是子类中的在超类之前运行。
?????在JUnit4中加入了一项新特性。加入了两个注释:@BeforeClass和@AfterClass,使用这两个注释的方法,在该测试类中,的测试方法之前、后各运行一次,而不是按照方法各运行一次。对于消耗很的啊的资源,可以使用这两个注释。
3.异常测试
?????因为使用了注释特性,JUnit4测试异常非常的简单和明了。通过对@Test传入expected参数值,即可测试异常。通过传入异常类后,测试类如果没有抛出异常或者抛出一个不同的异常,本测试方法就将失败。见代码:
/** * */package cn.hrmzone.junit; import static org.junit.Assert.assertEquals; import java.util.Arrays;import java.util.Collection;import java.util.regex.Matcher;import java.util.regex.Pattern; import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters; /** * @author hrmzone.cn *2010-10-2 */@RunWith(Parameterized.class)public class ParameterTest {private String dateReg;private Pattern pattern;//数据成员变量private String phrase;private boolean match; //使用数据的构造函数public ParameterTest(String phrase, boolean match) {super();this.phrase = phrase;this.match = match;} @Before public void init() {dateReg="^\\d{4}(\\-\\d{1,2}){2}";pattern=Pattern.compile(dateReg);} //测试方法@Testpublic void verifyDate() {Matcher matcher=pattern.matcher(phrase);boolean isValid=matcher.matches();assertEquals("Pattern don't validate the data format",isValid,match);}//数据供给方法(静态,用@Parameter注释,返回类型为Collection@Parameterspublic static Collection dateFeed() {return Arrays.asList(new Object[][] {{"2010-1-2",true},{"2010-10-2",true},{"2010-123-1",false},{"2010-12-45",false}});}}
?
8.数组断言
?????JUnit4中添加了一个用于比较数组的新断言(Assert),这样不必使用迭代比较数组中的条目。
?????public static void assertEquals(Object[] expected, Object[] actual)
?????public static void assertEquals(String message, Object[] expected,Object[] actual)
?????JUnit4是向前兼容的,在JUnit4中依然可以使用JUnit3的测试代码,而不需要做任何改动。
?????JUnit测试框架将测试更加便捷和容易,编写测试代码也是简单、明了,但功能依然强大。