2015-01-06 10 views
6

Sto utilizzando i tratti per rendere i miei controller ASCIUTTI. Voglio testare la classe Trait usando Spock. Qui è la mia caratteristica del campione e test case Spock rispettivamente:Come scrivere un caso di test di un'unità di spock per i tratti in graal 2.4?

trait SomeTrait { 
    public void checkSomething (Closure c){ 
     // Do some operation 
     c.call 
    } 
} 

@TestMixin(GrailsUnitTestMixin) 
class SomeTraitSpec extends Specification { 
    void "test checkSomething "(){ 
     setup: 
     MockedClass mockedObj = new MockedClass() 
     def x=0 
     def c = { 
      x=1 
     } 

     when: 
     mockedObj.checkSomething(c) 

     then: 
     assert x==1 
    } 
} 
class MockedClass implements PermissionTrait { 
    // some thing 
    } 

Dal tratto è un'interfaccia, ho una classe deriso nel mio banco di prova che sta attuando il Trait, ho creare un oggetto di questa classe deriso e chiamare il mio Metodo dei tratti che voglio testare. È questo l'approccio corretto, se non per favore punta nella giusta direzione con un esempio adatto.

+0

Qualcuno ha affrontato una situazione del genere? –

risposta

7

La coercizione di tipo di Groovy può essere utilizzata per aggiungere comportamenti da un tratto a una classe in fase di esecuzione.

class MyTraitSpec extends Specification 
{ 
    @Shared 
    MyTrait testInstance = new Object() as MyTrait 

    // ... 
} 

È necessario essere consapevoli che questo crea un'istanza Proxied, anche se la documentazione (http://docs.groovy-lang.org/docs/groovy-2.3.0/html/documentation/core-traits.html#_runtime_implementation_of_traits) dice che il proxy è garantito per implementare il tratto e qualsiasi/tutte le interfacce, questo potrebbe causare problemi se si sta sempre verificando la tipo concreto dell'oggetto.