2016-07-23 40 views
0

Ich habe einen sehr seltsamen Fehler, hoffe, Sie können mir helfen! Ich benutze gerade Grils 2.5.1.NPE in Grails Service innerhalb der Unit-Test

Mein Service ist so etwas wie dieses:

@Transactional 
abstract class MyParentService { 
    AnotherService anotherService 
    [...] 
    @Transactional(readOnly = true) 
    List<Project> allProjects(){ 
     anotherService.doStuff() 
    } 
    [...] 
} 

gleiche Ergebnis, wenn der Service nicht abstrakt ist. Dann habe ich eine andere Dienst, dass man sich:

@Transactional 
class MyChildService extends MyParentService { 
    def aMethod(){ 
     List<Projects> projects = allProjects() 
     [...] 
    } 
} 

Dann habe ich eine spock Unit-Test:

@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 
    } 
} 

Wenn ich die Tests ausführen, erhalte ich eine NPE Fehler in dieser Zeile:

List<Projects> projects = allProjects() 

Die Methode allProjects wird nie aufgerufen (ich fügte einige Spuren hinzu und wird nie angezeigt).

Die komische Sache ist, dass, wenn ich "= allProjects()" kommentieren, führen Sie den Test aus (natürlich scheitert es wegen der Anerben), entfernen Sie den Kommentar erneut und führen Sie den Test erneut aus, es besteht. Aber später wird es für denselben NPE-Grund wieder scheitern.

Ich habe den Fehler nicht bekam, wenn Sie den Code mit der Anwendung ausgeführt wird, so ist es nur ein Gerät zu testen, was

Ich sollte sagen, dass ich mehr als einen Dienst haben MyParentService erstrecken und haben das gleiche Problem mit allen Einheit Tests

Irgendwelche Ideen?

Antwort

0

Ich beantworte meine Frage nur für den Fall, dass andere Leute mit dem gleichen Problem kommen. Ich habe das Problem nicht gefunden, aber es behoben nur Ändern von MyParentService als Merkmal und Kinder implementieren es, anstatt zu erweitern. Fehler scheint nicht erneut zu passieren