标签:
| 01 概述 |
JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:
1、用于测试期望结果的断言(Assertion)
2、用于共享共同测试数据的测试工具
3、用于方便的组织和运行测试的测试套件
4、图形和文本的测试运行器
测试一般分为:单元测试、集成测试(主要看一块代码加进去后,系统会不会有问题)、验收测试和压力测试。在大点的公司开发人员每天上班后,第一件事情就是从svn上把自己负责的代码checkout下来,然后运行单元测试,如果单元测试通过,那么说明自己的代码没有问题,然后就在代码块上修改与添加,完成后再用junit进行测试,测试完成后如果没有问题,那么就把相应的代码块提交给svn上。[2]
| 02 Junit配置 |
环境:Eclipse 中配置junit,
或手动 添加Junit.jar和hamcrest-core-xx.jar,hamcrest-library-xx.jar (或hamcrest-all-xx.jar)。(建议手动添加,在eclipse中通过前一种方法只引入Junit-xx.jar 和 hamcrest-core-xx.jar)
| 03 Junit3 和 Junit4的区别 |
| 04 Junit4的几个常用注解[3] |
Junit 4 的单元测试用例执行顺序为:
@BeforeClass –> @Before –> @Test –> @After –> @AfterClass;
每一个测试方法的调用顺序为:@Before –> @Test –> @After。
--------------------------------------------------------------------
| 05 hamcrest 和 testSuite 介绍[4] |
hamcrest就是专门为增强junit来提供的框架。Junit中,主要使用assert做一些基本的判断。但很多时候使用assert做判断,并不方便,如果要判断某几个值是否为true或false,这时使用hamcrest来判断就会方便许多。
在一个项目中,可能有很多的测试类,如果每个测试类都要点击运行,那么成百上千个类都需要测试,这会是个比较繁重的工作,这时可以使用可以使用junit的jar包中提供的Suite来解决这个问题。
| 06 综合实例 |
TestCalcuate类
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import org.junit.Before;
import org.junit.Test;
public class TestCalcuate {
Calcuate cal;
@Before
public void setUp(){
cal=new Calcuate();
}
@Test
public void testAdd(){
int rel=cal.add(22, 33);
assertEquals("加法存在问题",rel, 55);
}
@Test
public void testMinus(){
int rel=cal.minus(33, 11);
assertEquals("减法存在问题",rel,22);
}
@Test(expected=ArithmeticException.class)
public void testDivid(){
int rel=cal.divide(22, 0);
assertEquals("除法存在问题",rel,2);
}
@Test
public void testMul(){
int rel=cal.mul(10, 20);
assertEquals("乘法存在问题", rel,200);
}
@Test(timeout=1000)
public void testTime(){
try{
Thread.sleep(200);
}catch(Exception e){
e.printStackTrace();
}
int rel=cal.mul(10, 20);
assertEquals("乘法存在问题", rel,200);
}
@Test
public void testHam(){
assertThat(50, allOf(greaterThan(49),lessThan(60)));
assertThat(60, allOf(greaterThan(40),lessThan(90)));
assertThat("like.txt", endsWith(".txt"));
}
}
TestA类
import org.junit.*;
public class TestA {
@Test
public void testA(){
System.out.println("testA");
}
}
TestB类
import org.junit.*;
public class TestB {
@Test
public void testB(){
System.out.println("testB");
}
}
TestSuite类
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({TestA.class,TestB.class,TestCalcuate.class})
public class TestSuite {
@Test
public void testSuite(){
System.out.println("testSuite");
}
}
| 07 其它问题 |
1、测试原则:[4]
2、用junit在进行单元测试的时候,使用assertThat方法,发现hamcrest的greaterThan等方法无法识别【说是没有定义】,而且无法静态引用到Matchers类【import static org.hamcrest.Matchers.*;】 [5]
原因:因为junit默认只会依赖hamcrest-core-1.3包,而实际上hamcrest还有一个hamcrest-library.jar用来放置很多工具
| 参考文献 |
[1] 百度百科 Junit
[2] 悔海 http://huihai.iteye.com/blog/1986568
[3] 小倩的博客 http://blog.sina.com.cn/s/blog_8354dda80101ee8v.html
[4] 悔海 http://huihai.iteye.com/blog/1994270
[5] http://www.fwqtg.net/junit-使用hamcrest的matcher找不到的问题(比如greaterthan).html
标签:
原文地址:http://www.cnblogs.com/scecit/p/4852820.html