【发布时间】:2015-01-15 22:47:11
【问题描述】:
我在我的 UrlMappings.groovy 中定义了一个基本映射如果我运行我的应用程序并转到 /api/address/zip-code/12345 我会得到响应浏览器请求的显示操作。
group("/api/address"){
"/zip-code"( resources: 'zipCode', includes: ['show'] )
}
我正在尝试创建一个测试来验证我的映射是否有效,因为我将在这里创建大量映射并且我希望它们得到测试的支持。这是我的测试。
package com.vega.foo
import com.vega.foo.address.ZipCodeController
import grails.test.mixin.Mock
import grails.test.mixin.TestFor
import spock.lang.Specification
import org.codehaus.groovy.grails.web.mapping.UrlMappings
@TestFor(UrlMappings)
@Mock(ZipCodeController)
class UrlMappingsSpec extends Specification {
void "test zip code mapping"() {
expect:
assertForwardUrlMapping("/api/address/zip-code/12345", controller: 'zipCode', action: "show")
}
}
当我尝试运行此测试时,我收到以下错误。
编译[单元]测试时出现编译错误:BUG!阶段异常 源单元中的“指令选择” 'C:\websites********\test\unit\com\vega\foo\UrlMappingsSpec.groovy' 意外的 NullpointerException
这几乎是您可以编写的 URL 映射测试的基础。我在这里想念什么?
【问题讨论】:
-
基于url映射,测试应该是
assertForwardUrlMapping("/api/address/zip-code", controller: 'zipCode', action: "show")或者映射应该是group('/api/address'){ "/zip-code/$id"( resources: 'zipCode', includes: ['show'] ) } -
你实际上不需要$id。从文档中它将创建以下内容,我说我想要的只是展示动作。我可以通过访问 URL 手动验证这是否有效。 GET /books index GET /books/${id} 显示
-
assertForwardUrlMapping() 方法也不是问题。如果我用 expect: 1 == 1 替换我的测试,我会遇到同样的问题。 @TestFor(UrlMappings) 有问题
-
UrlMappingsSpec应该在here 提到的默认包中。请参阅注释部分。 -
不错的电话@dmahapatro,但我仍然收到同样的错误。很高兴知道它属于默认包,所以谢谢你!
标签: unit-testing grails groovy