用Java验证字符串的单元测试

时间:2018-04-04 11:07:39

标签: java unit-testing

我想检查一个特定的字符串是否不能有超过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();    
}

如您所见,有数百种可能性。在这种情况下该怎么做?

2 个答案:

答案 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}");
}

然后我会做几个断言,所以失败了错误的值,可以显示其原因。