【问题标题】:Grails specification test with service带有服务的 Grails 规范测试
【发布时间】:2016-07-27 08:24:19
【问题描述】:

我正在尝试在 Spock 规范测试中使用服务。

 def "Registrate company and user with some valid data"() {
     given:
     RegistrationService registrationService = Mock()
     controller.registrationService = registrationService

     when:
     def data =  registrationService.register('test@test.sk','a','a','a','12345576','159159159','a','a','a','a','a')

     then:
     assert data.instance1.hasErrors() == false
     assert data.instance2.hasErrors() == false
     assert data.instance3.hasErrors() == false
}

我收到空指针异常java.lang.NullPointerException: Cannot get property 'instace1' on null object.

如果我通过控制器运行服务,那么一切正常。

服务返回此[instance1:instance1,instance2:instance2,instance3:instance3]

【问题讨论】:

    标签: java unit-testing grails spock


    【解决方案1】:

    您需要指定模拟 RegistrationService 在调用其方法时返回的内容,例如

    def "Registrate company and user with some valid data"() {
        given:
        RegistrationService registrationService = Stub()
    
        // you should probably be a bit more precise about the arg-list
        registrationService.register(*_) >> 
                [instance1: instance1, instance2: instance2, instance3: instance3]
    
        controller.registrationService = registrationService
    
        when:
        def data = registrationService.register('test@test.sk','a','a','a','12345576','159159159','a','a','a','a','a')
    
        then:
        !data.instance1.hasErrors()
        !data.instance2.hasErrors()
        !data.instance3.hasErrors()
    }
    

    请注意,then: 块中不必使用assert,每个语句如果返回真值则认为成功,如果返回错误则认为失败。

    更新

    我注意到报告的错误信息是

    无法在空对象上获取属性“instace1”。

    所以看起来您的代码中某处可能缺少“n”

    【讨论】:

    • 您好,感谢您的回复。我尝试了您的解决方案,但仍然遇到相同的错误。
    • @Michael.D 我对代码做了一些修改,你能用上面的代码重试吗?
    • 您的解决方案有效,但现在我收到此错误。 User.hasErrors() 适用于参数类型:() 值:[]。顺便说一句,我修正了我的问题中的一个错字。
    • @Michael.D 如果这是一个单元测试,您需要使用@Mock(User) 来使hasErrors() 等方法可用
    • 我有这样的@Mock([User,Company,Branch])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2014-02-26
    相关资源
    最近更新 更多