【发布时间】: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