0
我有一个很奇怪的错误,希望你能帮助我!我目前正在使用grails 2.5.1。NPE在单元测试中的grails服务
我的服务是这样的:
@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()
[...]
}
}
然后,我有一个斯波克单元测试:
@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多个服务,并与所有单元同样的问题测试
任何想法?