1

Grails のこのフィールドには、次の制約があります。

businessNumber(matches: '([0-9A-Z]*9)RA([0-9A-Z]*4)', maxSize: 15)

grails が html ビューに maxlength 属性を埋め込むように maxSize 制約を設定しています。次のような制約の単体テストを作成します。

void testBusinessNumberExceedMaxSize(){
        mockChildrenSpecialAllowancesForm.setBusinessNumber("F%G&Hy934F4G6H%55")
        assertFalse (mockChildrenSpecialAllowancesForm.validate())
        assertEquals ("maxSize",mockChildrenSpecialAllowancesForm.errors.businessNumber)
        assertEquals (2, mockChildrenSpecialAllowancesForm.errors.getErrorCount())
    }

次に、次のエラーが生成されます。

testBusinessNumberExceedMaxSize(com.ass.socialservicescm.ChildrenSpecialAllowancesTests)
|  org.junit.ComparisonFailure: expected:<ma[xSize]> but was:<ma[tches]>
    at org.junit.Assert.assertEquals(Assert.java:125)
    at org.junit.Assert.assertEquals(Assert.java:147)
    at com.ass.socialservicescm.ChildrenSpecialAllowancesTests.testBusinessNumberExceedMaxSize(ChildrenSpecialAllowancesTests.groovy:177)

2つの制約に違反していると思います(エラーカウントが2であるため).1つはmaxSizeで、もう1つは一致です。しかし、maxSize 制約に対して assertEquals を実行するにはどうすればよいですか?

注:私はgrails 2.0.0を使用しています

4

2 に答える 2

0

私は試してみます

assert 'maxSize' in mockChildrenSpecialAllowancesForm.errors.getFieldErrors('businessNumber')*.code
于 2012-09-10T21:15:41.313 に答える
0

これを使用して、すべての検証例外を文字列に解析し、呼び出し元のコードで assertEquals を実行して、この結果と比較します。もっと簡単な方法があるかもしれませんが、今のところこれでうまくいきます。

public static String getErrorString(errors) {
    StringBuffer errorMsg = new StringBuffer();
    errors.allErrors.each {
        if (it instanceof org.springframework.validation.FieldError) {
            if ((it.defaultMessage) == null) {
                errorMsg.append('Error-> ObjectName:' + it.getObjectName() + ' /Field:' + it.getField() + ' /RejectedValue:' + it.getRejectedValue() + ".\n");
            } else {
                errorMsg.append(doReplace((String) it.defaultMessage, it.arguments) + "\n");
            }
        }
    }
    return errorMsg.toString();
}

public static String doReplace(String error, Object[] arguments) {
    int index = 0;
    arguments.each {
        error = error.replace("{" + index + "}", it.toString());
        index++;
    }
    return error;
}
于 2012-09-10T06:59:22.620 に答える