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?