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{
...
}
解决方案
也许这就是您所需要的(来自grails doc)。
或者,您也可以直接将 DomainClassUnitTestMixin 与 TestMixin 注释一起使用,然后在测试期间调用 mockDomain 方法来模拟域:
@TestFor(BookController)
@TestMixin(DomainClassUnitTestMixin)
class BookControllerSpec extends Specification {
void setupSpec() {
mockDomain(Book)
}
...
域列表也mockDomains
存在方法,您可以通过标准方式从上下文中检索。
推荐阅读
- google-cloud-platform - 谷歌封锁 25 端口背后的真实情况是什么?
- javascript - 正则表达式匹配两者之一
- sql - 每次在 SQL 中运行存储过程时,如何在下一行中选择值?
- r - 我们有混合输出类型(连续、类、生存)的回归链
- django - Django静态文件通过collectstatic递归保存创建膨胀
- rust - 是否可以为异步函数创建类型别名?
- ios - 如何从给定的日期时间响应中获取本地时区的商店营业时间?- 斯威夫特 5
- angular - 如何以角度在 post 请求中发送这种类型的正文
- javascript - Outlook 加载项 | Office.context.mailbox.item.body.getAsync() 问题
- c# - 有没有办法在 Unity 2D Light System 中隐藏处于阴影中的玩家?