2016-07-23 82 views
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多個服務,並與所有單元同樣的問題測試

任何想法?

回答

0

我回答我的問題,以防萬一其他人來這裏出現同樣的問題。 我還沒有找到問題,但修復它只是改變MyParentService是一個特質和兒童實現它而不是擴展。錯誤似乎不再發生