我正在尝试使用build-test-data plugin(v.2.0.4)在Grails 2.1.4应用程序的单元测试中构建测试数据。
该应用具有以下域类
class Brochure {
static constraints = {}
static hasMany = [pageTags: PageTag]
}
class PageTag {
static constraints = {
}
static belongsTo = [brochure: Brochure]
}
然后在我的单元测试中,我尝试使用
构建PageTag
的实例
@Build([Brochure, PageTag])
class BrochureTests {
void testSomething() {
PageTag pageTag = PageTag.build()
}
}
但它失败并出现错误
groovy.lang.MissingMethodException:没有方法签名: btd.bug.Brochure.addToPageTags()适用于参数类型: (btd.bug.PageTag)值:[btd.bug.PageTag :(未保存)]可能 解决方案:getPageTags()
我的示例看起来与plugin's docs中显示的完全相同,所以我不知道为什么这不起作用。展示该问题的示例应用程序可用here。
答案 0 :(得分:1)
我评论了链接的github问题,但这是因为grails @Mock
注释的工作原理perf "fix"。
此更改几乎删除了所有使BTD可以在单元测试中工作的链接代码。
目前唯一的方法是为域图的一部分中构建有效对象的所有域对象添加一个明确的@Mock
注释。
这个更改的测试代码会更快,这很好,但是它会给开发人员带来更大的负担,让他们在测试中了解和维护这些关系(BTD试图避免这种关系:)。