【问题标题】:Grails/GORM: inconsistent behavior for inherited domain classes (Testing VS Bootstrap)Grails/GORM:继承域类的不一致行为(测试 VS 引导)
【发布时间】:2011-10-10 05:07:03
【问题描述】:

我发现我的应用程序的行为与我为继承的域类所拥有的测试用例的结果不一致。以下是问题涉及的类(仅提供了部分代码)。

class Ticket {
    String title
    String description
    Date dateCreated
    Date lastUpdated
    User postedBy
}

class FacebookTicket extends Ticket {
    FacebookPost facebookPost
}

class FacebookPost {
    String postId
    String message
    String postedById
    String postedByName
    Date createdOnFacebook
    Date lastUpdatedOnFacebook
}

相关测试代码:

def facebookPost1 = new FacebookPost(postId:"12345", message:"This post should become a ticket", postedById:"09876",postedByName:"Rowz Roller", createdOnFacebook: new Date(), lastUpdatedOnFacebook: new Date())

facebookPost1.save(flush:true)

def facebookTicket1 = new FacebookTicket (title:"Facebook Ticket1",description:"First FACEBOOK ticket here",postedBy:user1,facebookPost: facebookPost1)

mockForConstraintsTests(FacebookTicket, [facebookTicket1])

assertTrue facebookTicket1.validate() //Succeeds

assertNotNull(facebookTicket1.save()) //Succeeds

def instances = FacebookTicket.list()
assertEquals 1,instances.size() //Fails

assertEquals 失败并出现 junit.framework.AssertionFailedError: expected: but was:

但是,同一段代码在 Bootstrap 中运行良好,相关实体甚至显示在 FacebookTicket 的 list 视图中。

这是由于 GORM 测试 w.r.t 的一些限制吗?继承域类还是我在这里做错了什么? (Ticket 和 FacebookPost 测试工作正常。)

谢谢。

PS:如果我应该提供更多代码,请告诉我。

【问题讨论】:

  • 这是单元测试还是集成测试?我问是因为单元测试中的 .save() 实际上不会保存域。另外,您是否尝试在测试中使用 .save(flush: true) 以确保在调用 .list() 之前已将域写入数据库?
  • 这是一个单元测试。我也试过 save(flush:true) 。
  • 要点是,未继承的实体的类似断言工作正常。我在单元测试中看到此问题仅适用于继承实体。

标签: inheritance grails grails-orm


【解决方案1】:

... 有类似的问题,建议将其作为集成测试而不是单元测试来处理。问题消失了。

【讨论】:

  • 哦是这样吗?我会尝试一下,看看它是否适合我。
猜你喜欢
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-07
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多