【问题标题】:How do I mock a domain in Grails but get it by its Parent?如何在 Grails 中模拟域但通过其父级获取它?
【发布时间】:2015-01-20 12:50:57
【问题描述】:

我在我的 grails 应用程序中使用 spring 安全核心插件,默认情况下它会为我创建一个 User 类。我可以在我的测试类上使用 @Mock([User]) 注释来模拟它。

在我的应用程序中,我有几种类型的用户,因此我创建了在应用程序本身中运行良好的子类型。

Subtype1 extends User
Subtype2 extends User

这在 grails 中处理得非常好,数据库也反映了这一点。然而,在我的代码中,我确实有一般用户可以调用的方法,所以我使用 User.get(id),因为子类型和父类的 id 相同。

如果我模拟用户和子类型,然后创建一个子类型对象如下

@TestFor(MyController)
@Mock([Subtype1,User])
class MyControllerSpec extends Specification {
  def test_methodName() {
    setup:
    Subtype1 sub = new Subtype1(username:"blah",password:"blah",.....).save()
    when:
    controller.methodName(sub.id)
    then:
    //Some tests here
}

然后下面的代码被注释显示结果

class MyController() {
    methodName(long id) {
        User user = User.get(id)  //This returns null
        Subtype1 sub = Subtype1.get(id)  //This works
    }
}

在未经过测试的应用程序中,两者都可以工作,但是当我模拟它们时,它会失败,并且在我小时候创建时不会让我得到父母。

知道我做错了什么吗?

【问题讨论】:

    标签: grails groovy mocking subclass


    【解决方案1】:

    看起来这在单元测试中是不可能的,无论是否有意。

    将测试编写为集成测试可以正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 2020-05-03
      • 2018-08-16
      • 2014-06-29
      • 2020-07-15
      • 1970-01-01
      相关资源
      最近更新 更多