【问题标题】:Help with failing Grails test - domain methods not working?帮助 Grails 测试失败 - 域方法不起作用?
【发布时间】:2011-05-06 15:22:48
【问题描述】:

鉴于这项服务:

class AchievementsService {

    static transactional = true

    public void onEvent(String eventName, User user) {
        def event = Event.findByName(eventName)
        if (!event) {
            event = new Event(name: eventName, autoConfigured: true)
            event.save()
        }
    }
}

为什么这个测试失败了:

class AchievementsServiceTests extends GrailsUnitTestCase {
    AchievementsService service
    User user
    protected void setUp() {
        super.setUp()
        service = new AchievementsService()
        user = new User(username:"marty",password: "password")
        mockDomain(User,[user])
    }

    void testThat_given_eventDoesNotExistWhenCallingOnEvent_that_eventIsCreated()
    {
         mockDomain Event       
         service.onEvent "MyEvent", user
         assert Event.count() == 1
    }
}

失败如下:

Assertion failed: 

assert Event.count() == 1
             |       |
             0       false

我必须在我的设置中或者在调用我的.save() 方法时遗漏了一个步骤,但我看不到它。

【问题讨论】:

  • 您是否收到任何有关事件的验证错误?将此添加到您的服务中进行测试:if (!event.save()) { event.errors.each{println it} }
  • 如果您将它作为集成测试运行它是否有效?在将其转换为集成测试后,您可能需要删除对 mockDomain 的调用
  • @David - 谢谢,我的模型中缺少约束。将此转换为答案,我会接受。

标签: java unit-testing grails groovy


【解决方案1】:

您可能遇到验证失败,将此代码添加到您的服务以打印验证错误:

if (!event.save()) { 
  event.errors.each{println it} 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多