如何在Spy-Class的groovy中使用Spock框架单元测试日志记录错误

时间:2018-02-20 10:18:11

标签: java logging groovy spock

我有一个Class,里面有我要模拟的方法。

这就是我使用Spy()的原因:

MyClass myClass = Spy(MyClass)

有以下问题: How to unit test logging error with Spock framework in groovy 我可以成功获取日志消息,但对于这个,我不能只使用类的正常实例化,如:

MyClass myClass = new MyClass()

当Class是间谍时,如何在Spock测试中获取日志消息?

1 个答案:

答案 0 :(得分:0)

测试日志记录的一般方法是编写一个简单的appender,它将事件存储在内存中,设置日志记录配置以在测试中使用它,然后,在运行测试代码之后,获取记录的事件并验证它们。

假设使用Logback,可以编写测试追加器,例如像这样:

public class InMemoryAppender extends AppenderBase<ILoggingEvent> {
    private static final List<String> events = new ArrayList<>();

    public static synchronized List<String> getEvents() {
        return new ArrayList<>(events);
    }

    @Override
    protected void append(ILoggingEvent event) {
        synchronized(InMemoryAppender.class){
            events.add(event.getFormattedMessage());
        }
    }
}

我不认为间谍有什么可以帮助解决这个问题,因为它会窥探对象的方法,而不是内部行为。