2015-04-16 13 views
5

Abbiamo aggiornato la nostra app da Grails 2.4.4 a 2.5.0. Funzionano tutti bene, ma alcuni casi di test hanno esito negativo e contengono alcuni metodi privati.Grails test di spock con metodi privati ​​non riusciti dopo l'aggiornamento a 2.5.0

import org.junit.Before 

class UserServiceSpec extends IntegrationSpec { 

    @Before 
    def setup() { 
     // Some initialization 
    } 

    // being used in other test methods 
    private void getParams() { 
      // some code 
    } 

    void testUserUniqueEmali() { 
     when: "this runs" 
     // code 
     then: "hello" 
     // code 
    } 
} 

Eccezione gettata:

java.lang.IllegalAccessException: Class org.spockframework.util.ReflectionUtil can not access a member of class com.test.UserServiceSpec with modifiers "private" 
    at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:153) 
    at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:84) 
    at org.junit.runners.Suite.runChild(Suite.java:128) 
    at org.junit.runners.Suite.runChild(Suite.java:27) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 
    at _GrailsTest.run_closure1(_GrailsTest.groovy:102) 
    at TestApp.run_closure1(TestApp.groovy:32) 

ho generato rapporto di dipendenza e qui ci sono alcune statistiche:

org.spockframework:spock-core:1.0-groovy-2.4 
org.codehaus.groovy:groovy-all:2.4.3 

Questo dimostra che la versione più recente del quadro Spock è in uso, ma io' Non sono in grado di risolvere questo problema. Ho provato a rimuovere il modificatore "privato", ma ancora non funziona.

risposta

7

Dopo aver esaminato per qualche tempo, ho capito il problema ma non la causa principale.

Fondamentalmente, l'annotazione @Before era il colpevole e, a causa di qualche ragione, test di spock stava lanciando quell'errore. La rimozione di quell'annotazione inutilizzata ha risolto il problema.

Questo funzionava in Grails 2.4.4 e ha avuto esito negativo in 2.5.0, potrebbe essere dovuto a cambiamenti nel framework di Spock.

+0

risposta da ZZ5 descrive cosa sta succedendo –

1

Ho riscontrato lo stesso problema. Per impedire loro, non nominare i metodi annotati con JUnit's @Before o @After come i metodi di Spock: pulizia e impostazione.

Problemi correlati