我想检查一个特定的字符串是否不能有超过5个字符的长度,以字母“S”开头,并且都是大写字母。 (这只是一个例子)
想象一下,你有这种行为乘以一个对象上的20个字段。
我想写一个单元测试,说明if_all_the_fields_are_correct_validation_should_return_true();
我的问题是:
我应该这样做吗?
如果是,断言可能是千元,因为可能存在多种可能性。在这种情况下应该做什么?
我将逐个测试每个字段,但我也希望立即获得所有字段的结果。
更新
我的重点不在于字符串验证方法。这已经完成了。
我的问题是:
让我们举一个简单的例子。
例如,我有一个名为MyValid的对象。在里面我有一个字符串,一个整数和一个日期。
在类ValidationOfMyValid上我有一个名为isValid的方法(String a,Integer b,Date c);
需要完成的断言示例:
if_all_the_fields_on_My_Valid_is_Right(){
assertThat(this.myValid.isValid("STACK", 12, "20081205")).isTrue();
assertThat(this.myValid.isValid("STACK", "integer", "20081205")).isFalse();
assertThat(this.myValid.isValid("stack", "ee", "20081205")).isFalse();
}
如您所见,有数百种可能性。在这种情况下该怎么做?
答案 0 :(得分:2)
您可以在测试用例中使用反射。这是一种黑客行为:
Class aClass = MyPOJO.class ...//obtain class object
Field[] fields = aClass.getFields();
for(Field field: fields){
if(field.getType() instanceof String){
// Use whatever regex you have for assertions
}
}
答案 1 :(得分:0)
你可以做一个小功能:
boolean stringIsValid(String s) {
return s.matches("S[A-Z]{1,4}");
}
然后我会做几个断言,所以失败了错误的值,可以显示其原因。