Tl; dr :我想以this code绿色来测试\u001B[?1049l
。
感谢Jeff Scott Brown的getting me that far。
我有一个POGO,其中包含一些来自JSON的自定义转换,我希望可以在Grails控制器中收到它们:
MyCmdTest."data bind works"
使用:
def myAction(MyCmd myData) {
...
}
请注意@Validateable
class MyCmd {
SomeType some
void setSome(Object value) {
this.some = customMap(value)
}
}
如何根据JSON值(例如字符串)创建customMap
的实例。假设默认设置器不起作用;例如,一个不止一次的模式就是这样的枚举:
SomeType
在这里,enum SomeType {
Foo(17, "foos"),
Bar(19, "barista")
int id
String jsonName
SomeType(id, jsonName) {
this.id = id
this.jsonName = jsonName
}
}
将采用整数或字符串,并返回匹配的大小写(或customMap
,如果不合适的话)。
现在,我具有以下形式的单元测试:
null
显然,两个变体都调用class RegistrationCmdTest extends Specification {
String validData // hard-coded, conforms to JSON schema
void test() {
MyCmd cmd = new MyCmd(JSON.parse(validData))
// check members: success
MyCmd cmd2 = JSON.parse(validData) as MyCmd
// check members: success
}
}
。
我还有一个控制器单元测试,该测试将请求JSON设置为相同的字符串:
setSome
基本上,同一件事也可以作为集成测试。
但是,运行完整的应用程序时,映射失败; void "register successfully"() {
given:
ResonseCmd = someMock()
when:
controller.request.method = 'POST'
controller.request.contentType = "application/json"
controller.request.json = validData
controller.myAction()
then:
noExceptionThrown()
// successful validations: service called, etc.
}
。
我必须实现或重写哪些方法,以便Grails调用我的转换(此处为some == null
),而不是在不知道要做什么的地方插入customMap
?
答案 0 :(得分:0)
可以使用cluster_member_count
注释来自定义数据绑定:
@BindUsing
另请参阅the MWE repo。
来源:Hubert Klein Ikkink @ DZone,Official Docs(还有其他自定义方式)