我正在尝试使用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: No signature of method: btd.bug.Brochure.addToPageTags() is applicable for argument types: (btd.bug.PageTag) values: [btd.bug.PageTag : (unsaved)] Possible solutions: getPageTags()
我的示例看起来与plugin's docs中显示的示例完全相同,因此我不知道为什么它不起作用。演示该问题的示例应用程序可用here。
最佳答案
在2.0.5版中已修复
我对链接的github问题进行了评论,但这是因为perf "fix"在grails @Mock
注释的工作方式上。
此更改几乎删除了所有链接代码,使BTD可以在单元测试中工作。
目前解决此问题的唯一方法是,在域图中构建有效对象所需的所有域对象都添加一个显式的@Mock
批注。
这次更改将使测试代码更快,这是很棒的,但是这给开发人员在测试中了解和维护这些关系带来了更大的负担(这是BTD试图避免的事情:)。
关于unit-testing - 在Grails 2中使用build-test-data插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16104195/