2013-04-08 11 views
11

Sono in procinto di aggiornare a Grails 2.1.x, e ho bisogno di rifare alcuni dei miei test vecchio stile.esecuzione grails 2.1.3 test in Intellij Idea: errore bizzarro in Spock test: impossibile aggiungere la classe Dominio [classe x.y.Z]. Non è un dominio

Ho appena aggiunto un nuovo test al mio Spock Spec, e per questo test ho bisogno di prendere in giro una classe Dominio aggiuntiva.

Prima di questo, ho avuto:

@Mock([Event, EventType]) 

ora ho:

@Mock([Event, EventType, Notification]) 

Notification.groovy è nello stesso pacchetto esatto e la directory fisica di eventi e EventType (sotto graal-app/dominio) quindi è sicuramente una classe di dominio Grails.

Quando provo a fare funzionare la mia prova ottengo il seguente stack trace:

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) 

Quando vado attraverso la tana del coniglio e avviare il debug l'esecuzione, ottengo a questa parte del DomainClassArtefactHandler (linea 87):

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

questa esplode con un'eccezione, perché credo che il campo ID non è presente

Quindi, qualcosa sta andando male, i campi di Gorm non sono pubblicità ded prima che questo venga eseguito.

Qualcuno ha un suggerimento su cosa devo fare? Devo contrassegnare la mia classe di dominio come una @Entity (questo effettivamente rende il mio test superato)?

Sono sicuro che non è necessario che il test dell'unità passi per il test.

Qualche consiglio?

UPDATE: In realtà, ho appena scoperto che la questione si pone solo quando si esegue il test di unità dentro la mia IDE: IntelliJ IDEA 12.1

problemi creati, con la prova di applicazione qui:

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

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

Quando rimuovo i blocchi mapping statico in entrambe le classi di dominio, la pa di prova SSES!

+1

Si trova nella cartella di test di integrazione o nella cartella di test dell'unità? Inoltre, se si dispone di test di integrazione di spock che estendono le specifiche e si utilizza @TestFor, si ottengono errori davvero strani, è comunque necessario utilizzare integrationspec per i test di integrazione. –

+0

Ciao Jeff, è un test unitario. Non ci sono ancora specifiche nella cartella di integrazione, solo test in stile junit. Grazie per l'interesse, lo terrò a mente. – loteq

+1

Per quel dominio oggetto esiste un blocco di mappatura statico? –

risposta

19

Sembra che il problema sia dovuto al fatto che IDEA non esegue correttamente la pulizia da una sessione di test a un'altra. I test passano una volta che si ricostruisce il progetto.

+0

Puoi chiarire cosa intendi ricostruendo il progetto? Sono anche bloccato con questo problema, è sicuramente correlato a IntelliJ, ma non sono sicuro di cosa si debba fare esattamente per resettarlo. – dbrin

+1

Se si utilizza l'ultima versione di IDEA (14.x), esiste un altro bug che causa lo stesso comportamento e la ricostruzione del progetto non funzionerà. Vedere https://youtrack.jetbrains.com/issue/IDEA-138275 e c'è una soluzione alternativa nei commenti: disabilitare la compilazione dei processi nelle impostazioni: -Dgroovyc.in.process = false. – loteq

+0

ok sto provando questa opzione, devo fare qualcos'altro, perché sto ancora vedendo il problema? – dbrin