看到花花同学写的白盒测试的白皮书,大致翻了下。感觉缺少点什么,之前也一直都在讨论,测试数据与测试代码是否需要分离,测试代码如何建设冗余的问题。如何解决这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/