作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个对象
@Validateable
class Foo {
Map<String, String> items
static constraints = {
items minSize: 1
}
}
但是这个测试失败了:
@Test
void shouldNotValidateIfItemsIsEmpty() {
Foo foo = new Foo(items: [:])
assert !foo.validate()
}
我做错了什么?它应该根据 grails 'minSize' documentation 工作: "设置集合 或数字属性的最小大小。"
最佳答案
文档可能具有误导性。 minSize 约束仅适用于:
java.util.Map但是不扩展 java.util.Collection界面
参见MinSizeConstraint
的supports
方法:
public boolean supports(Class type) {
return type != null && (
String.class.isAssignableFrom(type) ||
Collection.class.isAssignableFrom(type) ||
type.isArray());
}
您可以自己开发custom constraint对于这个或 Thermech 建议的自定义验证器
此外,为了让 Grails 正确模拟验证方法,您的测试类应该类似于:
@TestMixin(ControllerUnitTestMixin) class FooTest {
@Test
void shouldNotValidateIfItemsIsEmpty() {
Foo foo = mockCommandObject Foo
foo.items = [:]
assert !foo.validate()
} }
关于validation - Grails:如何在 map 上设置 minSize 约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15483268/
我是一名优秀的程序员,十分优秀!