Java中字符串验证的单元测试
我想检查一个特定字符串的长度是否不能超过5个字符,以字母“S”开头,并且都是大写的。(这只是一个例子) 想象一下,在一个对象上,这种行为乘以20个字段 我想写一个单元测试,它说如果所有字段都正确,验证应该返回true() 我的问题是:Java中字符串验证的单元测试,java,unit-testing,Java,Unit Testing,我想检查一个特定字符串的长度是否不能超过5个字符,以字母“S”开头,并且都是大写的。(这只是一个例子) 想象一下,在一个对象上,这种行为乘以20个字段 我想写一个单元测试,它说如果所有字段都正确,验证应该返回true() 我的问题是: 我应该这样做吗 如果是,则断言可能是千,因为可能存在多种可能性。在这种情况下应该怎么做 我将单独测试每个字段,但我更愿意立即得到所有字段的结果 更新: 我的重点不是字符串验证方法。这是已经作出的决定 我的问题是: 我需要验证几个字段,当这些字段通过验证时,最
- 我应该这样做吗
- 如果是,则断言可能是千,因为可能存在多种可能性。在这种情况下应该怎么做
- 我需要验证几个字段,当这些字段通过验证时,最终结果就可以了
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();
}
正如你所看到的,有上百种可能性。在这种情况下应该做什么?您可以在测试用例中使用反射。这是一种黑客行为:
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
}
}
您可以在测试用例中使用反射。这是一种黑客行为:
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
}
}
您可以创建一个小功能:
boolean stringIsValid(String s) {
return s.matches("S[A-Z]{1,4}");
}
然后,我会进行几次断言,以便显示错误的值及其原因。您可以创建一个小函数:
boolean stringIsValid(String s) {
return s.matches("S[A-Z]{1,4}");
}
然后我会做几个断言,以便显示错误的值及其原因。您可以使用正则表达式,例如
^S[a-Z]{1,4}$
,它将是一个不超过5个字符的单词,以S
开头,后跟1-4个大写字母。此外,如果字段具有特定的值生成位,可能您应该为创建这种字符串的方法编写一个测试,而不是在您要设置它的地方。我将进一步将所有唯一的正则表达式封装在一个枚举中,比如{字母数字
,电子邮件
}等,并声明一个方法,例如布尔验证(字符串s)
。这样,您就可以跨多个字段重复使用枚举的常用方法。您可以使用正则表达式,例如^S[a-Z]{1,4}$
,它是一个不超过5个字符的单词,以S
开头,后跟1-4个大写字母。此外,如果字段具有特定的值生成位,可能您应该为创建这种字符串的方法编写一个测试,而不是在您要设置它的地方。我将进一步将所有唯一的正则表达式封装在一个枚举中,比如{字母数字
,电子邮件
}等,并声明一个方法,例如布尔验证(字符串s)
。这样,您就可以跨多个字段重用枚举的通用方法。