发布
社区首页 >问答首页 >Grails测试hickups

Grails测试hickups
EN

Stack Overflow用户
提问于 2010-05-20 12:19:00
回答 3查看 206关注 0票数 1

我有两个测试问题。这两个问题可能都很容易回答。首先,我用Grails编写了这个单元测试:

代码语言:javascript
代码运行次数:0
复制
void testCount() {
    mockDomain(UserAccount)

    new UserAccount(firstName: "Ken").save()
    new UserAccount(firstName: "Bob").save()
    new UserAccount(firstName: "Dave").save()

    assertEquals(3, UserAccount.count())
}

由于某种原因,我得到了返回0的结果。我是不是忘了做什么?

编辑:哦,我明白了。验证约束被违反,所以它们没有存储。有没有办法在这里获得一些反馈?这真是一件很糟糕的事情...

第二个问题是给那些使用IDEA的人。我应该运行什么-IDEA的junit测试,还是grails目标?我有两个选择。

此外,为什么IDEA说我的测试通过了,即使上面的测试实际上失败了,它也提供了绿灯?如果我每次运行测试时都要检查html格式的测试报告,这真的会让我抓狂……

帮助?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-20 12:54:37

我总是在测试中使用object.save(failOnError: true),以避免像这样的静默失败。如果验证失败,这会导致抛出异常。即使单元测试中没有真正的数据库,大多数约束也会被检查,尽管如果我想测试域对象之间的复杂关系,我更喜欢使用集成测试。

票数 2
EN

Stack Overflow用户

发布于 2010-05-20 12:26:52

我个人并没有发现JUnit测试在使用grails时特别有用。使用测试运行器进行“单元”测试可能很好。对于集成测试,您可以考虑在"debug“模式下设置一个ant目标来运行您的测试。随着时间的推移,运行测试的时间越来越长,我倾向于只从命令行运行它们,以避免IntelliJ增加的额外开销。

关于你的单元测试,我很确定你需要运行一个集成测试来得到一个不为零的计数。

我不确定您确切地使用哪个单元测试,但是由于GORM在单元测试中不是自举的,所以我不确定域对象模拟是否支持计数的递增。

如果您的域对象经过验证,您的测试很可能会作为集成测试通过。

票数 1
EN

Stack Overflow用户

发布于 2010-05-20 18:54:04

将flush:true添加到保存方法中。

代码语言:javascript
代码运行次数:0
复制
new UserAccount(firstName: "Ken").save(flush:true)
...

Grails将hibernate会话的刷新模式设置为手动。因此,更改不会在操作返回之后持久化,而是在呈现视图之前。这允许视图访问延迟加载的集合和关系,并防止更改自动持久化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2870983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档