The*_*ech 2 validation grails map grails-2.2
我有这个对象
@Validateable
class Foo {
Map<String, String> items
static constraints = {
items minSize: 1
}
}
Run Code Online (Sandbox Code Playgroud)
但是这个测试失败了:
@Test
void shouldNotValidateIfItemsIsEmpty() {
Foo foo = new Foo(items: [:])
assert !foo.validate()
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么?它应该根据grails'minSize'文档工作:"设置集合或数字属性的最小大小."
文档可能会产生误导.minSize约束仅适用于:
java.util.Map但是不会延长java.util.Collection的接口
见supports方法MinSizeConstraint:
public boolean supports(Class type) {
return type != null && (
String.class.isAssignableFrom(type) ||
Collection.class.isAssignableFrom(type) ||
type.isArray());
}
Run Code Online (Sandbox Code Playgroud)
您可以按照Thermech的建议为此或自定义验证器开发自己的自定义约束
另外,为了让Grails正确地模拟validate方法,你的测试类应该是这样的:
@TestMixin(ControllerUnitTestMixin) class FooTest {
@Test
void shouldNotValidateIfItemsIsEmpty() {
Foo foo = mockCommandObject Foo
foo.items = [:]
assert !foo.validate()
} }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1007 次 |
| 最近记录: |