【发布时间】:2013-11-17 19:49:27
【问题描述】:
我有一个相当简单的 Grails 单元测试:
@TestFor(DateTimeTagLib)
class DateTimeTagLibSpec extends Specification {
def setup() {
}
def cleanup() {
}
void "showTime"() {
assertEquals "14:26", new DateTimeTagLib().showTime(value: DateTime.parse("2013-01-01 14:26:00")).toString()
}
}
当我尝试使用 IntelliJ Idea 13 EAP 中的“运行”启动它时,我得到:
java.lang.NullPointerException
at grails.test.mixin.support.GrailsUnitTestMixin.shutdownApplicationContext(GrailsUnitTestMixin.groovy:266)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
at org.spockframework.runtime.extension.builtin.JUnitFixtureMethodsExtension$FixtureType$FixtureMethodInterceptor.intercept(JUnitFixtureMethodsExtension.java:145)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:84)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
GrailsUnitTestMixin 中有问题的行是:
static void shutdownApplicationContext() {
if (applicationContext.isActive()) { <-- this one
当我使用grails test-app unit: 或grails test-app :spock 启动它时,我得到:
| Tests PASSED - view reports in C:\projects\MyProject\target\test-reports
但是 - 那里的报告实际上显示 No tests executed.,尽管测试位于 /test/unit/mypackage/ 中,它是由 Grails 自动创建的。如果我在测试中添加一个打印语句,它也不会被执行。
我做错了什么?
编辑 - Burt Beckwith 建议我的单元测试是错误的。他是对的,但这实际上并不能完全解决我遇到的问题:/
void "showTime"() {
given:
print 'executing'
def taglib = new DateTimeTagLib()
expect:
"14:26" == taglib.showTime(value: DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("2013-01-01 14:26:00")).toString()
}
得到
executing
java.lang.NullPointerException
at grails.test.mixin.support.GrailsUnitTestMixin.shutdownApplicationContext(GrailsUnitTestMixin.groovy:266)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
at org.spockframework.runtime.extension.builtin.JUnitFixtureMethodsExtension$FixtureType$FixtureMethodInterceptor.intercept(JUnitFixtureMethodsExtension.java:145)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:84)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:138)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
无论是由于这个原因还是其他原因,我在命令行test-app :spock 中也得到了不同的行为。
grails> test-app :spock
| Error An error occurred installing the plugin [webdriver-0.4.2]: Unable to delete file C:\projects\myproject\target\work\plugins\webdriver-0.4.2\lib\webdriver-ast-transforms.jar
| Error Error running script test-app :spock: org.codehaus.groovy.grails.cli.ScriptExitException (Use --stacktrace to see the full trace)
编辑 #2 - 在构建配置中注释掉 webdriver / 重新启动 grails / clean-all 有助于解决最后一个问题,但 test-app :spock 仍然显示为“未执行测试。”在 HTML 报告中。
【问题讨论】:
标签: unit-testing grails spock