现在的位置: 首页 > 综合 > 正文

JUnit入门

2017年12月05日 ⁄ 综合 ⁄ 共 3126字 ⁄ 字号 评论关闭
 

下面我们就演示一个在junit4下面的示例

一个方法类:

public class T {

public int add(int x, int y) {

return x + y;

}

public int divide(int x, int y) {

return x/y;

}
}

该方法的junit4测试类:

import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.lessThan;
import static org.junit.Assert.assertThat;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.bjsxt.junit4.T;

public class TTest {

@BeforeClass

public static void beforeClass() {
    System.out.println("beforeClass");
}

@AfterClass
public static void afterClass() {
    System.out.println("afterClass");
}

@Before
public void before() {
    System.out.println("before");
}

@Test
public void testAdd() {
    int z = new T().add(5, 3);
    assertThat(z, is(8));
    assertThat(z, allOf(greaterThan(5), lessThan(10)));
}

@Test(expected = java.lang.ArithmeticException.class, timeout = 100)
public void tDivide() {
    int z = new T().divide(8, 0);
}

@After
public void after() {
    System.out.println("after");
}
}

运行结果显示绿条,控制台输出:

beforeClass
before
after
before
After
afterClass

注:当然很多情况下,不是所有的注解都会用到,一般只使用 @Test注解就够了

我们可以看到,采用Annotation的JUnit已经不会霸道的要求你必须继承自TestCase了,而且测试方法也不必以test开头了,只要以@Test来描述即可。

从上面的例子可以看到在JUnit 4中还引入了一些其他的元数据,下面一一介绍:
@Before:
使用了该元数据的方法在每个测试方法执行之前都要执行一次。

@After:
使用了该元数据的方法在每个测试方法执行之后要执行一次。

@Test(expected=*.class)
在JUnit4.0之前,对错误的测试,我们只能通过fail来产生一个错误,并在try块里面assertTrue(true)来测试。现在,通过@Test元数据中的expected属性。expected属性的值是一个异常的类型

@Test(timeout=xxx):
该元数据传入了一个时间(毫秒)给测试方法,如果测试方法在制定的时间之内没有运行完,则测试也失败。

@ignore:
该元数据标记的测试方法在测试中会被忽略。,你可以为该标签传递一个String的参数,来表明为什么会忽略这个测试方法。比如:@lgnore(“该方法还没有实现”),在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。

另外

JUnit4 放弃旧的断言,使用hamcrest断言
Junit4下载地址:
http://sourceforge.net/projects/junit/files/junit/,这里面有很多版本,目前最新的是junit4.8.1 .
Hamcrest下载地址:
http://code.google.com/p/hamcrest/downloads/list,最新的是1.3版本,下载一个Hamcrest all-in-one Jar的最新版本即可.

JUnit4 中只使用assertThat方法足矣
assertThat方法需要使用hamcrest的匹配方法:
示例

assertThat( n, allOf( greaterThan(1), lessThan(15) ) );
assertThat( n, anyOf( greaterThan(16), lessThan(8) ) );
assertThat( n, anything() );
assertThat( str, is( "bjsxt" ) );
assertThat( str, not( "bjxxt" ) );

assertThat( str, containsString( "bjsxt" ) );
assertThat( str, endsWith("bjsxt" ) );
assertThat( str, startsWith( "bjsxt" ) );
assertThat( n, equalTo( nExpected ) );
assertThat( str, equalToIgnoringCase( "bjsxt" ) );
assertThat( str, equalToIgnoringWhiteSpace( "bjsxt" ) );

assertThat( d, closeTo( 3.0, 0.3 ) );
assertThat( d, greaterThan(3.0) );
assertThat( d, lessThan (10.0) );
assertThat( d, greaterThanOrEqualTo (5.0) );
assertThat( d, lessThanOrEqualTo (16.0) );

assertThat( map, hasEntry( "bjsxt", "bjsxt" ) );
assertThat( iterable, hasItem ( "bjsxt" ) );
assertThat( map, hasKey ( "bjsxt" ) );
assertThat( map, hasValue ( "bjsxt" ) );

Failure和Error
Failure是指测试失败
Error是指测试程序本身出错

JUnit4 Annotation
@Test: 测试方法
(expected=XXException.class)
(timeout=xxx)
@Ignore: 被忽略的测试方法
@Before: 每一个测试方法之前运行
@After: 每一个测试方法之后运行
@BeforeClass: 所有测试开始之前运行 //必须定义为static方法
@AfterClass: 所有测试结束之后运行   //必须定义为static方法

运行多个测试
选中要测试类所在的包,右键,选择“Run as”,再选择“Run Open Dialog”,在弹出框中再选择下面一个单选框“Run all tests in the selected project,package or source folder”,最后再选择最右边的“Run”按钮即可。

遵守约定,比如:
类放在test包中
类名用XXXTest结尾
方法用testMethod命名

其他测试框架
TestNG

转载自http://hi.baidu.com/suny_duan/blog/item/7e905a943de97d40d0135e3f.html

抱歉!评论已关闭.