unit-testing - 如何在 groovy 中使用 Spock 框架对日志记录错误进行单元测试

标签 unit-testing logging groovy spock

所以我有一个类,它有一个记录消息的方法:

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


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

如何测试是否使用 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???
    }
}

最佳答案

您可以检查记录器上的错误调用

@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')
    }
}

编辑:完整示例 https://github.com/christoph-frick/spock-test-logging

关于unit-testing - 如何在 groovy 中使用 Spock 框架对日志记录错误进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24439151/

相关文章:

java - 在java中检查对象是否相等而不等于覆盖

unit-testing - 什么是用于单元测试的好的无效 IP 地址?

object - Groovy 闭包不会修改委托(delegate)对象中的值

java - 玩!模板 - 将动态字符串传递给 JavaScript 不起作用?

java - 重复使用 Groovy Shells 会导致 PermGen 空间已满

node.js - 如何测试使用nodemailer发送电子邮件的Sequelize 'afterCreate'钩子(Hook)?

java - JUnit如何测试多个函数

java - 减少 Camel FTP 组件日志记录

java - log4j错误日志中面临的问题和异常处理

Java 实用程序记录器 : custom formatter only works for some levels