2015-03-04 13 views
5

Per semplicità diamo una classe molto semplice:Ottenere "Troppo pochi invocazioni" a prova di unità con Spock

public class TestingClass { 

    public void method1(){ 
     System.out.println("Running method 1"); 
     method2(); 
    } 

    public void method2(){ 
     System.out.println("Running method 2"); 
    } 
} 

Ora sto scrivendo un semplice test, che verifica che quando invochiamo method1(), method2() viene invocato:

class TestingClassSpec extends Specification { 
    void "method2() is invoked by method1()"() { 
     given: 
     def tesingClass = new TestingClass() 

     when: 
     tesingClass.method1() 
     then: 
     1 * tesingClass.method2() 
    } 
} 

eseguendo questo test, sto ottenendo il seguente errore:

Running method 1 Running method 2

Too few invocations for:

1 * tesingClass.method2() (0 invocations)

Perché Sto ottenendo questo errore? Il registro stampato mostra che method2() è stato richiamato.

risposta

3

È necessario utilizzare Spy quando si prova interazioni su oggetti reali, vedere sotto:

@Grab('org.spockframework:spock-core:0.7-groovy-2.0') 
@Grab('cglib:cglib-nodep:3.1') 

import spock.lang.* 

class TestingClassSpec extends Specification { 
    void "method2() is invoked by method1()"() { 
     given: 
     TestingClass tesingClass = Spy() 

     when: 
     tesingClass.method1() 

     then: 
     1 * tesingClass.method2() 
    } 
} 

public class TestingClass { 

    public void method1(){ 
     System.out.println("Running method 1"); 
     method2(); 
    } 

    public void method2(){ 
     System.out.println("Running method 2"); 
    } 
} 
+0

Ciao Opal, grazie per la tua risposta. Sì, so che posso usare Spy e funziona perfettamente. Voglio capire qual è la logica che questo codice con oggetto reale non funziona. –

+0

@AramAslanyan non funzionerà perché hai bisogno di spock nelle invocazioni a qualsiasi livello - per verificare le invocazioni devi usare spie o mock, ecco come funziona il test di interazione. È necessario avvolgere un oggetto reale in qualche modo con gli strumenti forniti. È chiaro? – Opal

Problemi correlati