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