unit-testing - 在 grails 中使用 mockDomain 时如何覆盖方法的逻辑?

标签 unit-testing grails mocking dns

我想像平常一样模拟一个域(mockDomain(Class)),但我想覆盖该域的一个方法(beforeDelete)具体),仅针对该单元测试使用自定义逻辑。

如何实现这一目标?

最佳答案

您可以使用 Groovy 元类重写域类上的 beforeDelete 方法。

域类:

class Person {
  String name
  boolean deleted

  def beforeDelete() {
    println "Deleting Person ${id}"
    deleted = true
    return false
  }
}

单元测试:

void testBeforeDelete() {
    mockDomain(Person)
    def p = new Person(name:"test")
    p.save()
    assertEquals false, p.deleted
    p.delete()
    assertEquals true, p.deleted
}

--testBeforeDelete 的输出--

删除人员 1

void testBeforeDeleteOverrideBeforeDelete() {
    mockDomain(Person)
    Person.metaClass.'static'.beforeDelete = {println 'Do not touch me'}
    def p = new Person(name:"test")
    p.save()
    assertEquals false, p.deleted
    p.delete()
    assertEquals true, p.deleted
}

--testBeforeDeleteOverrideBeforeDelete 的输出--

别碰我

关于unit-testing - 在 grails 中使用 mockDomain 时如何覆盖方法的逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5887177/

相关文章:

grails webflow - 将非序列化模型传递给 View

c# - 使用 MOQ 模拟系统事件

.net - 为什么.Net框架中的每个类都没有对应的接口(interface)?

javascript - 如何将 $rootScope 注入(inject) AngularJS 单元测试?

c# - 有哪些工具可用于测试多线程 .net 代码?

unit-testing - 用spock另一个域类创建的模拟域类

java - 如何在 Grails 应用程序上使用 PDF 查看器预览 PDF

unit-testing - 为什么我必须扩展 PowerMockTestCase?

unit-testing - Flutter/Dart 在单元测试中等待几秒钟

c# - 使用 stub 和模拟进行单元测试