测试数据与代码分离的测试
作者:网络转载 发布时间:[ 2013/1/10 10:30:34 ] 推荐标签:
看到花花同学写的白盒测试的白皮书,大致翻了下。感觉缺少点什么,之前也一直都在讨论,测试数据与测试代码是否需要分离,测试代码如何建设冗余的问题。如何解决这2个问题,feed4junit是一种思路,我对比junit 4和feed4junit的功能,大致了解这些功能的实现。
--------------------------------------------------------------------------------
对于网站的接口测试,常常面临的一个场景:大量不同的输入,但处理逻辑的业务不变,对其结果进行验证也会有不同的期望值。按照之前的一些思路,往往会为每一组输入和输入写一个case,达成大量的代码冗余。
基于上面的场景,junit 4给出了参数化的特性,从而实现了不同的输入对应相同的代码。
待测的方法:
publicclassUserAccess {
// simple validation for user name and password
publicstaticboolean accessCheck(String userName, String password) {
if(userName.length() <= 4 || userName.length() > 8 )
returnfalse;
if(password.length() <= 4 || password.length() > 8 )
returnfalse;
if(userName.contains("@"))
returnfalse;
if(password.contains("*"))
returnfalse;
returntrue;
}
}
1、使用Junit参数化,减少代码冗余:
测试代码:
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
importstaticorg.junit.Assert.assertEquals ;
import sample.junit.code.UserAccess;
/*
* JUnit - Parameter test sample
*/
@RunWith(Parameterized.class)
publicclassJunitSample {
privateString user ;
privateString pwd ;
privateboolean expected ;
@Parameters
publicstaticCollection dataGenerate(){
returnArrays.asList(newObject[][]{
{"user01","123456",true},
{"user02","123456",true},
{"user03","12345678",true}
});
}
publicJunitSample(String user,String pwd,boolean expected){
this.user = user;
this.pwd = pwd;
this.expected = expected;
}
@Test
publicvoidtestAccessCheck(){
assertEquals(expected,UserAccess. accessCheck(user, pwd));
}
}
运行结果如下所示:

2、数据与代码的分离(Feed4Junit)
Feed4JUnit 是开源的测试组件,您可以从如下链接下载新版本http://sourceforge.net/projects/feed4junit/files/

sales@spasvo.com