JUnit4 Note (尚学堂马士兵)

2 篇文章 0 订阅

What is Unit Test

写了个类,要给别人用,会不会有bug?怎么办?测试一下。

用main方法测试好不好?不好!

1.      不能一起运行!

2.      大多数情况下需要人为的观察输出确定是否正确

Why Unit Test

重用测试,应付将来的实现的变化。

提高士气,明确知道我的东西是没问题的。

软件后期维护成本最高,前期确保健壮性。

JUnit4 HelloWorld

1.      new project---new JUnit TestCase(ClassNameTest    )Eclipse itself hasthe JUnit jar.

With “import static” can use the static test methodsdirectly.

Assert 判断

TestMethod---right click---run as JUnit Test

Keeps the bar green to keeps the code clean    

2.      建立类

3.      建立testcase

放弃旧的断言,使用hamcrest断言

1.      assertThat .replace of all theassert method.

Matcher规则匹配 is(expected value)

2.      使用hamcrest的匹配方法 hamcrest jar need to download

a)      更自然 more close to the english

b)      add jar : build path – addexternal archieves

hamcrest-core and hamcrest-library jar.

c)      Class loader error: Remove fromlibrary Eclipse JUnit jar and add the newest JUnit jar

Add external archives

3.      示例

a)     assertThat( n, allOf( greaterThan(1), lessThan(15) )); //  1<n<15
assertThat( n, anyOf( greaterThan(16), lessThan(8) ) );// n>16 | n<8
assertThat( n, anything() );
assertThat( str, is( "bjsxt" ) );//str =
assertThat( str, not( "bjxxt" ) e

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

c)     assertThat( d, closeTo( 3.0, 0.3 ) ); // 3+- 0.3
assertThat( d, greaterThan(3.0) );
assertThat( d, lessThan (10.0) );
assertThat( d, greaterThanOrEqualTo (5.0) );
assertThat( d, lessThanOrEqualTo (16.0) );

d)   Map test

 

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

Failure和Error

1.      Failure是指测试失败

2.      Error是指测试程序本身出错 eg: int a = 8/0;

JUnit4 Annotation

1.      @Test: 测试方法

a)      (expected=XXException.class)expect an exception

b)      (timeout=xxx) expect the methodfinish in xxx ms.

2.      @Ignore: 被忽略的测试方法.don’t run the test Methodnow.

3.      @Before: 每一个测试方法之前运行: something to be aprerequisite for the method run

4.      @After: 每一个测试方法之后运行

5.      @BeforeClass: 所有测试开始之前运行 public static void beforeClass()

Only the static method can run before initialize

Function:request for some source or create the APP environment.

Eg:connect to the DB. Configure file.etc.

6.      @AfterClass: 所有测试结束之后运行

Function:to set free some source or over the APP environment.

Eg: disconnect to the DB.etc.

 

import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;


import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.AfterClass;
import org.junit.Ignore;
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)));
		//int a = 8/0;
	}
	
	
	@Test(expected=java.lang.ArithmeticException.class, timeout=100)
	public void testDivide() {
		int z = new T().divide(8, 0);
		
	}
	
	@After
	public void after() {
		System.out.println("after");
	}

}

Run multi tests

right click on the packageName>runconfiguration>select “run all tests ….”

Conclusion Note:

TTD: test driven development. Put forward a important idea: write the testsfirsty.

JUnit can testJDBC,HTML,Struts,Hibernate,Spring,EJB,but need other jars.

1.      遵守约定,比如:

a)      类放在test包中

b)      类名用XXXTest结尾

c)      方法用testMethod命名

其他框架

TestNG

Ant: A very big project that need it tobuild ,deploy,compile,test. Autocally.

       Buteclipse can’t do it .but use Unix shell and Ant can realize the automation.

Custom the build.xml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值