Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中字符串验证的单元测试_Java_Unit Testing - Fatal编程技术网

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

Java中字符串验证的单元测试,java,unit-testing,Java,Unit Testing,我想检查一个特定字符串的长度是否不能超过5个字符,以字母“S”开头,并且都是大写的。(这只是一个例子) 想象一下,在一个对象上,这种行为乘以20个字段 我想写一个单元测试,它说如果所有字段都正确,验证应该返回true() 我的问题是: 我应该这样做吗 如果是,则断言可能是千,因为可能存在多种可能性。在这种情况下应该怎么做 我将单独测试每个字段,但我更愿意立即得到所有字段的结果 更新: 我的重点不是字符串验证方法。这是已经作出的决定 我的问题是: 我需要验证几个字段,当这些字段通过验证时,最

我想检查一个特定字符串的长度是否不能超过5个字符,以字母“S”开头,并且都是大写的。(这只是一个例子)

想象一下,在一个对象上,这种行为乘以20个字段

我想写一个单元测试,它说如果所有字段都正确,验证应该返回true()

我的问题是:

  • 我应该这样做吗

  • 如果是,则断言可能是千,因为可能存在多种可能性。在这种情况下应该怎么做

我将单独测试每个字段,但我更愿意立即得到所有字段的结果

更新:

我的重点不是字符串验证方法。这是已经作出的决定

我的问题是:

  • 我需要验证几个字段,当这些字段通过验证时,最终结果就可以了
让我们做一个简单的例子

例如,我有一个名为MyValid的对象。里面有一个字符串,一个整数和一个日期

在ValidationOfMyValid类上,我有一个名为isValid的方法(字符串a,整数b,日期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();    
}

正如你所看到的,有上百种可能性。在这种情况下应该做什么?

您可以在测试用例中使用反射。这是一种黑客行为:

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)
。这样,您就可以跨多个字段重用枚举的通用方法。