2014-06-26 14 views
6

Così ho una classe che ha un metodo che registra un messaggio:Come unità di errore di registrazione di prova con quadro Spock in Groovy

class Car { 
    private Logger logger = LoggerFactory.getLogger(Car.class); 


    void startCar() { 
     logger.error("car stopped working"); 
    } 
} 

Come posso provare che l'errore è stato registrato utilizzando il framework di test Spock?

class CarTest extends Specification { 
    def "test startCar"() { 
     given: 
     Car newCar = new Car(); 

     when: 
     newCar.startCar(); 

     then: 
     // HOW CAN I ASSERT THAT THE MESSAGE WAS LOGGED??? 
    } 
} 

risposta

12

si potrebbe verificare la presenza di un'invocazione di errore sul logger

@Grab(group='org.spockframework', module='spock-core', version='0.7-groovy-2.0') 
@Grab(group='org.slf4j', module='slf4j-api', version='1.7.7') 
@Grab(group='ch.qos.logback', module='logback-classic', version='1.1.2') 

import org.slf4j.Logger 

class MockLog extends spock.lang.Specification { 

    public class Car { 
     private Logger logger = org.slf4j.LoggerFactory.getLogger(Car.class); 
     void startCar() { 
      logger.error('car stopped working'); 
     } 
    } 

    def "mock log"() { 
    given: 
     def car = new Car() 
     car.logger = Mock(Logger) 
    when: 
     car.startCar() 
    then: 
     1 * car.logger.error('car stopped working') 
    } 
} 
Problemi correlati