【问题标题】:Grails Spock testing Controller and serviceGrails Spock 测试控制器和服务
【发布时间】:2015-01-07 21:14:29
【问题描述】:

您好,我有一个名为 ApiController 的控制器,它使用一个名为 ApiService 的服务,如下所示:

def createCategory(){
        def jsonObj = request.JSON
        jsonObj.each{ key, value ->
            params.put(key,value)
        }
        render apiService.createCategory(params)
}

效果很好。 但我似乎无法为它编写测试。

这是我已经走了多远:

@TestFor(ApiController)
@Mock([Category,ApiService])   
class CategorySpec extends Specification {

    def setup() {
    }

    def cleanup() {
    }

    void "test"() {

        setup:
        def apiService = Mock(ApiService)

        when:
        request.method = 'POST'
        request.requestMethod = 'POST'
        params.categoryID = 'test'

        controller.createCategory()

        then:
        println(response)
        1==1

    }

从这里我得到以下错误:

java.lang.NullPointerException: Cannot invoke method createCategory() on null object

这显然是因为它看不到我的 apiService bean。所以我的问题是我如何在 Spock 中做到这一点?

【问题讨论】:

  • 包含 createCategory() 的控制器看起来如何...或给出该控制器的详细结构。

标签: unit-testing grails spock


【解决方案1】:

最有可能与Transactional bughttps://github.com/grails/grails-core/issues/1501有关

ApiService apiService = new ApiService()
controller.apiService = apiService
apiService.transactionManager = Mock(PlatformTransactionManager) { getTransaction(_) >> Mock(TransactionStatus) }

这是一个临时修复(根据错误报告评论)...这对我有用:)

【讨论】:

  • 讨厌这个错误...但我知道他们有很多事情要做!
  • 谢谢,我想我永远也不会知道为什么它不起作用。
【解决方案2】:

这就是我在 Grails 2.4 中的做法,在规范类上没有注释 @Mock

when:
    def serviceMock = mockFor(ApiService)
    serviceMock.demand.createCategory { def params -> "output sample" }
    controller.apiService = serviceMock.createMock()
    controller.createCategory()

【讨论】:

    【解决方案3】:

    ApiService 在测试中已成功模拟,但您如何将模拟提供给控制器?单位规格没有 DI,你不能指望它自动接线。因此,

    setup:
    controller.apiService = Mock(ApiService)
    

    【讨论】:

      猜你喜欢
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多