【发布时间】:2016-11-27 01:13:48
【问题描述】:
我有一个非常奇怪的错误,希望你能帮助我!我目前正在使用 grails 2.5.1。
我的服务是这样的:
@Transactional
abstract class MyParentService {
AnotherService anotherService
[...]
@Transactional(readOnly = true)
List<Project> allProjects(){
anotherService.doStuff()
}
[...]
}
如果服务不是抽象的,结果相同。 然后,我有另一项扩展该服务的服务:
@Transactional
class MyChildService extends MyParentService {
def aMethod(){
List<Projects> projects = allProjects()
[...]
}
}
然后我有一个 spock 单元测试:
@TestFor(MyChildService)
class MyChildServiceSpec extends Specification {
AnotherService anotherService
def setup(){
anotherService = Mock()
service.anotherService = anotherService
List<Project> list = [new Project(a: 1), new Project(a:2)]
anotherService.doStuff() >> list
}
void "do some stuff"(){
when:
aMethod()
then:
//some asserts
}
}
当我运行测试时,我在这一行得到一个 NPE 错误:
List<Projects> projects = allProjects()
allProjects 方法从未被调用(我添加了一些痕迹但从未显示)。
奇怪的是,如果我将“= allProjects()”注释掉,执行测试(当然,因为断言而失败),再次删除注释并再次执行测试,它通过了。但稍后,它会因为同样的 NPE 原因再次失败。
我在使用应用程序执行代码时没有遇到错误,所以它只是一个单元测试的东西
我应该说我有不止一项服务扩展了 MyParentService 并且在所有单元测试中都有同样的问题
有什么想法吗?
【问题讨论】:
标签: unit-testing grails groovy spock