2013-04-08 10 views
11

Ich bin dabei, auf die Grils 2.1.x zu aktualisieren, und muss einige meiner alten Tests wiederholen.running grails 2.1.3 Tests in Intellij Idee: Seltsamer Fehler im Spock-Test: Domain-Klasse [Klasse x.y.Z] kann nicht hinzugefügt werden. Es ist keine Domain

Ich habe gerade einen neuen Test zu meinem spock Spec hinzugefügt, und für diesen Test muss ich eine zusätzliche Domain-Klasse spotten.

Vor diesem hatte ich:

@Mock([Event, EventType]) 

Jetzt habe ich:

@Mock([Event, EventType, Notification]) 

Notification.groovy ist in exakt der gleichen Paket und physische Verzeichnis als Veranstaltungs- und Eventtype (unter Grails-app/Domain), also ist es definitiv eine Grails-Domain-Klasse.

Wenn ich versuche, meinen Test bekomme ich folgende Stack-Trace auszuführen:

org.codehaus.groovy.grails.exceptions.GrailsConfigurationException: Cannot add Domain class [class x.y.Notification]. It is not a Domain! 
    at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.addArtefact(DefaultGrailsApplication.java:911) 
    at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.addArtefact(DefaultGrailsApplication.java:615) 
    at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomain(DomainClassUnitTestMixin.groovy:131) 
    at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomain(DomainClassUnitTestMixin.groovy:128) 

Wenn ich durch den Kaninchenbau gehen und starten Sie die Ausführung Debuggen, ich auf diesen Teil von DomainClassArtefactHandler erhalten (Linie 87):

  // make sure the identify and version field exist 
      testClass.getDeclaredField(GrailsDomainClassProperty.IDENTITY); 
      testClass.getDeclaredField(GrailsDomainClassProperty.VERSION); 

dies bläst mit einer Ausnahme auf, weil ich das ID-Feld erraten

So geht etwas schief nicht vorhanden ist, sind die GORM Felder nicht ad ded bevor dies ausgeführt wird.

Hat jemand einen Vorschlag, was ich tun soll? Muss ich meine Domain-Klasse als @Entity markieren (das macht tatsächlich meinen Test bestanden)?

Ich bin mir ziemlich sicher, dass das nicht obligatorisch sein sollte, damit mein Komponententest bestanden wird.

Irgendwelche Ratschläge?

UPDATE: Eigentlich habe ich gerade entdeckt, dass dieses Problem entsteht erst, wenn ich die Unit-Tests in meinem IDE ausführen: IntelliJ IDEA 12.1

Probleme erstellt, mit Test-App hier:

http://jira.grails.org/browse/GRAILS-9989

http://youtrack.jetbrains.com/issue/IDEA-105087

Wenn ich die statische Zuordnung Blöcke in beiden Klassen Domäne zu entfernen, der Test pa sss!

+1

Ist dies im Integrationstestordner oder im Komponententestordner? Auch wenn Sie irgendwelche Spock-Integrationstests haben, die die Spezifikation erweitern und @TestFor verwenden, werden Sie wirklich seltsame Fehler bekommen, die Sie noch brauchen, um die Integrationspec für Integrationstests zu verwenden. –

+0

Hallo Jeff, es ist ein Komponententest. Es gibt noch keine Specs im Integrationsordner, nur Junit Style Tests. Danke, dass Sie Interesse geweckt haben, aber ich werde es mir merken. – loteq

+1

Gibt es für dieses Domänenobjekt einen statischen Mapping-Block? –

Antwort

19

Es scheint, als wäre das Problem darauf zurückzuführen, dass IDEA von einem Testlauf zum nächsten nicht korrekt aufgeräumt hat. Die Tests werden bestanden, sobald Sie das Projekt neu erstellt haben.

+0

Können Sie erklären, was Sie mit dem Wiederaufbau des Projekts gemeint haben? Ich stecke auch mit diesem Problem fest, es ist definitiv IntelliJ verwandt, aber nicht sicher, was genau getan werden muss, um es zurückzusetzen. – dbrin

+1

Wenn Sie die neueste Version von IDEA (14.x) verwenden, gibt es einen weiteren Fehler, der das gleiche Verhalten verursacht, und das Neuaufbau des Projekts wird nicht funktionieren. Siehe https://youtrack.jetbrains.com/issue/IDEA-138275 und es gibt eine Problemumgehung in den Kommentaren: in Kompilierung in den Einstellungen deaktivieren: -Dgroovyc.in.process = false. – loteq

+0

ok ich versuche diese option, muss ich etwas anderes tun, weil ich immer noch das problem gesehen habe? – dbrin