添加的包:hamcrest-core.jar
hamcrest-library.jar
junit.jar
注:一般不使用 MyEclipse 自带的JUnit的方法
JUnit的各种断言
JUnit
提供了一些辅助函数,用于帮助你确定某个被测试函数是否工作正常。通常而言,把所有这些函数统称为断言。断言是单元测试最基本的组成部分。
1> assertEquals([String message], expected,actual):
比较两个基本类型或对象是否相等(
expected
和
actual
是原始类型数值
(primitive value)
或者必须为实现比较而具有
equal
方法)
2> assertFalse([String message],boolean condition):
对布尔值求值,看它是否为
“
真
“
3> assertTrue([String message],boolean condition):
对布尔值求值,看它是否为
“
假
“
4> assertNull([String message],java.lang.Object object):
检查对象是否为
“
空
“
5> assertNotNull([String message],java.lang.Object object):
检查对象是否不为
“
空
”
6> assertSame([String message],expected,actual):
检查两个对象是否为同一实例
7> assertNotSame([String message],expected,actual):
检查两个对象是否不为同一实例
8> fail( String message ):
使测试立即失败,其中
message
参数使可选的。这种断言通常被用于标记某个不应该到达的分支(例如,在一个预期发生的异常之后)
JUnit和异常
对于测试而言,下面两种异常是我们可能会感兴趣的:
1>
从测试代码抛出的可预测异常
2
>
由于某个模块(或代码)发生严重错误,而抛出的不可预测异常
任何对
assertTrue(true)
的使用都应该被翻译为“我预期控制流程会达到这个地方”。通常而言,对于方法中每个被期望的异常,你都应该写一个专门的测试来确认该方法在应该抛出异常的时候确实会抛出异常。如上例中
testEmpty()
测试方法的设计。
对于处于出乎意料的异常,你最好简单的改变你的测试方法的声明让它能抛出可能的异常。
JUnit
框架可以捕获任何异常,并且把它报告为一个错误,这些都不需要你的参与。
测试类
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import com.chenshun.unit.T;
/*
* 每一个测试函数运行前 都回执行@Before对应的函数
* 每一个测试函数运行后 都回执行@After对应的函数
*
* 你要在方法的前面使用@Test标注,以表明这是一个测试方法。对于方法的声明也有如下要求:名字可以随便取
* ,没有任何限制,但是返回值必须为void,而且不能有任何参数。如果违反这些规定,会在运行时抛出一个异常。
* 至于方法内该写些什么,那就要看你需要测试些什么了
*/
public class T_Test {
//在任何方法运行前运行一次该方法
@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");
}
//测试结束时进行的操作
@After
public void after(){
System.out.println("after");
}
//忽略测试方法
@Ignore
public void testT(){
int a;
}
//@Test表示其下方方法是一个测试方法
@Test
public void testAdd() {
int z = new T().add(1 , 2);
System.out.println("z = " + z);
assertEquals(z , 3);//判断是否相等
assertThat(z , is(3));//判断是否相等
assertThat(z , allOf(greaterThan(2), lessThan(4)));//判断在不在指定范围里
}
// timeout:测试方法最大执行时间(毫秒)
@Test(expected=java.lang.ArithmeticException.class, timeout= 100)
public void testDivide(){
int z = new T().divide(8, 0);
}
}
目标类
public class T {
public int add(int x, int y){
return x + y;
}
public int divide(int x,int y){
return x / y;
}
}
对于测试Spring
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import chenshun.model.ProCategory;
import chenshun.service.ProCategoryI;
/*
*每一个测试函数运行前 都回执行@Before对应的函数
*每一个测试函数运行后 都回执行@After对应的函数
*
*你要在方法的前面使用@Test标注,以表明这是一个测试方法。对于方法的声明也有如下要求:名字可以随便取
*,没有任何限制,但是返回值必须为void,而且不能有任何参数。如果违反这些规定,会在运行时抛出一个异常。
*至于方法内该写些什么,那就要看你需要测试些什么了
*/
public class TestMyBatis {
//在任何方法运行前运行一次该方法
@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");
}
//测试结束时进行的操作
@After
public void after(){
System.out.println("after");
}
//忽略测试方法
@Ignore
public void testT(){
}
@Test
public void test1() {
ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"spring.xml","spring-mybatis.xml"});
ProCategoryI procategoryservice = (ProCategoryI) ac.getBean("ProCategoryService");
ProCategory p = procategoryservice.getProCategoryById(1);
System.out.println(p);
}
}
JUnit测试SpringMVC
import java.util.Date;
import java.util.UUID;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring.xml", "classpath:spring-hibernate.xml" })
public class TestHibenate {
// 在任何方法运行前运行一次该方法
@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");
}
// 测试结束时进行的操作
@After
public void after() {
System.out.println("after");
}
// 忽略测试方法
@Ignore
public void testT() {
}
private UserServiceI userService;
@Ignore
public void test() {
tUser user = new tUser();
user.setId(UUID.randomUUID().toString());
user.setName("陈顺");
user.setPwd("123");
user.setCreatedatetime(new Date());
user.setModifydatetime(new Date());
userService.save(user);
}
// set get
public UserServiceI getUserService() {
return userService;
}
@Autowired
public void setUserService(UserServiceI userService) {
this.userService = userService;
}
}