How to unit test logging error with Spock framework in groovy

前端 未结 2 1331
日久生厌
日久生厌 2020-12-17 00:45

So I have a class that has a method that logs a message:

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


    void startCar() {
         


        
相关标签:
2条回答
  • 2020-12-17 01:03

    My Loggers are private static final so I cannot use solution mentioned above and rather not use Reflection. Alternative below.

    If you are using Spring, you have acces to OutputCaptureRule.

    @Rule
    OutputCaptureRule outputCaptureRule = new OutputCaptureRule()
    
    def test(){
    outputCaptureRule.getAll().contains("<your test output>")
    }
    
    0 讨论(0)
  • 2020-12-17 01:17

    you could check for an invocation of error on the 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')
        }
    }
    

    edit: Full example https://github.com/christoph-frick/spock-test-logging

    0 讨论(0)
提交回复
热议问题