:我想参加考试
MyCmdTest."data bind works"
this code
绿色。
getting me that far
.
我有一个POGO,其中包含一些来自JSON的自定义转换,我希望在Grails控制器中接收这些转换:
def myAction(MyCmd myData) {
...
}
@Validateable
class MyCmd {
SomeType some
void setSome(Object value) {
this.some = customMap(value)
}
}
注意如何
customMap
SomeType
从一个JSON值(比如,一个字符串)。假设默认的setter不起作用;例如,我们有一个不止一次的模式是这样的枚举:
enum SomeType {
Foo(17, "foos"),
Bar(19, "barista")
int id
String jsonName
SomeType(id, jsonName) {
this.id = id
this.jsonName = jsonName
}
}
自定义地图
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
}
}
setSome
在两种变体中都调用。
我还有一个控制器单元测试,它将请求JSON设置为相同的字符串:
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.
}
基本上相同的东西也作为集成测试运行。
然而,映射
失败
运行完整应用程序时;
some == null
.
我必须实现或覆盖哪些方法,以便Grails调用我的转换(这里,
自定义地图
无效的