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多個服務,並與所有單元同樣的問題測試
任何想法?