为了在渲染(模板)中进行模型的集成测试,我使用metaClass.render将模型存储在地图中。但是,地图似乎不适用于'其中'块
def renderMap
def mmc
def setup() {
MilestonesMgtController.metaClass.render = { Map map ->
renderMap = map
}
mmc = new MilestonesMgtController()
}
void "create a new milestone"() {
when:
mmc.params.newName = 'Written Workshop'
mmc.params.newDeadlineFT = a
mmc.params.newDeadlinePT = '4'
mmc.params.newNotificationFT = '7'
mmc.params.newNotificationPT = '7'
mmc.newMilestone()
then:
renderMap.template == 'milestoneDetails'
renderMap.model.errorMessages == b
where:
a | b
'4' | null //first test
'0' | 'deadlineFT cannot be 0' //second test
}
第二次测试'其中'块失败,它表示renderMap为null。如果我改变第一次和第二次测试之间的顺序,结果是一样的。似乎第一轮后renderMap为null。你知道代码有什么问题吗?非常感谢!
答案 0 :(得分:0)
如果您在集成测试中启动Class级元类,那么您将真正开始自我攻击。与单元测试不同,这些元类更改不会被回滚,并且感染您的测试运行中的元类污染。
如果您确实需要集成测试,请尝试metaClassing控制器实例以防止污染。我很好奇这是否能解决你的问题。此外,我倾向于使用@Shared这样的案例,虽然我不确定这是非常必要的。
@Shared renderMap
@Shared mmc
def setup() {
mmc = new MilestonesMgtController()
mmc.metaClass.render = { Map map -> renderMap = map }
}