我有一个非常奇怪的错误,希望你能帮助我!我目前正在使用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并且所有单元测试都有同样的问题
有什么想法吗?
答案 0 :(得分:0)
我回答我的问题以防其他人来到这里遇到同样的问题。 我没有发现问题,但修复它只是将MyParentService更改为特征,而子代实现它而不是扩展。错误似乎没有再次发生