如何在Grails单元测试类中动态模拟域?

时间:2018-11-14 18:30:25

标签: unit-testing grails

在Grails 3.x中编写单元测试时,我们必须模拟域。这是示例代码。

package com.example.service
import grails.test.mixin.Mock
import grails.test.mixin.TestFor
import spock.lang.Ignore
import spock.lang.Specification

@TestFor(SomeService)
@Mock([DomainA, DomainB])
class SomeServiceSpec extends Specification{
   ...
}

问题是当添加新域时,假设DomainC且单元测试依赖于DomainC,则这些单元测试将失败。然后,我们必须手动添加DomainC。

是否可以动态模拟域?

@TestFor(SomeService)
@Mock([dynamically mock all domain objects here])
class SomeServiceSpec extends Specification{
   ...
}

1 个答案:

答案 0 :(得分:0)

也许这就是您所需要的(来自grails doc)。

  

或者,您也可以直接使用DomainClassUnitTestMixin   与TestMixin批注,然后调用mockDomain方法   在测试过程中模拟域名:

@TestFor(BookController)
@TestMixin(DomainClassUnitTestMixin)
class BookControllerSpec extends Specification {

    void setupSpec() {
         mockDomain(Book)
    }
...

域列表还存在mockDomains方法,您可以通过标准方式从上下文中检索该列表。