junit测试框架


一、junit测试框架简述

JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

二、junit测试框架的用途

可以让我们在编写代码的过程中,可以不断进行测试,而不需要主方法,且可以在方法测试前后都加上要执行的方法,也可以在这个类测试前后都加上要执行的代码,用于启动一些测试方法前都需要的条件,及放于测试后常用于释放资源.

并且,可以断言测试,也就是测试一个方法是否可以得到你想要的返回值.

三、junit测试框架的使用

1.测试一个方法是否正常

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;//导入Junit包
public class Test15 {
@Test//加注解,表示把程序交给Junit运行.
public  void print() {
char c =(char)65;
System.out.println(c);
}
}




2.在每个方法测试前后都运行自定义方法.

char c;
@Before//方法运行前先执行的方法
public void before(){
 c =(char)65;
} @Test//加注解,表示把程序交给Junit运行.
public  void print() {
System.out.println(c);
}
@After//方法运行后
void after(){
System.out.println("after");
}




3.在类加载前后运行,注意:都要是static

static char c;
@BeforeClass //只类加载前运行一次
public static void before(){
 c =(char)65;
}
@Test//加注解,表示把程序交给Junit运行.
public  void print() {
System.out.println(c);
}
@AfterClass//类加载后运行一次
public static void after(){
System.out.println("after");
}




4.断言判断某个方法的结果是不是你想要的,第一个参数表示你期望的结果.有好多方法,例:

@Test
public  void test() {
Print p = new Print();
//断言 判断某个方法的结果是不是你想要的,第一个参数表示你期望的结果.有好多方法,这例如
Assert.assertEquals("a", p.print());
}
}
class Print{
public String print(){
return "a";
}
}
测试方法运行的时间
@Test(timeout=200)
public void testFindUser() {
//以下进行多次断言,判断各种情况下是否准确
User user=dao.findUser("张三", "123");
assertNotNull(user);
user=dao.findUser("张三", "22");
assertNull(user);
user=dao.findUser("22", "123");
assertNull(user);
user=dao.findUser("22", "13");
assertNull(user);
}




四、junit测试框架何时使用

在编写程序的时候,我们为了减少发后的维护压力,让代码边编写边测试.

五、junit测试框架的特点

(1) 不要用TestCase的构造函数初始化Fixture,而要用setUp()和tearDown()方法。   

(2)不要依赖或假定测试运行的顺序,因为JUnit利用Vector保存测试方法。

(3)避免编写有副作用的TestCase。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。

(4) 当继承一个测试类时,记得调用父类的setUp()和tearDown()方法。   

(5)将测试代码和工作代码放在一起,一边同步编译和更新。(使用Ant中有支持junit的task.) 

(6)测试类和测试方法应该有一致的命名方案。如在工作类名前加上test从而形成测试类名。  

(7)确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。   

(8)如果你编写的软件面向国际市场,编写测试时要考虑国际化的因素。不要仅用母语的Locale进行测试。   

(9)尽可能地利用JUnit提供地assert/fail方法以及异常处理的方法,可以使代码更为简洁。  

(10)测试要尽可能地小,执行速度快。   

(11)不要硬性规定数据文件的路径。   

(12)利用Junit 的自动异常处理书写简洁的测试代码 事实上在Junit 中使用try-catch 来捕获异常是没有必要的,Junit 会自动捕获异

(13)充分利用Junit 的assert/fail 方法.assertSame()用来测试两个引用是否指向同一个对象.assertEquals()用来测试两个对象是否相等 

(14). 确保测试代码与时间无关