【问题标题】:How to unit test logging error with Spock framework in groovy in a Spy-Class如何在 Spy-Class 的 groovy 中使用 Spock 框架对日志记录错误进行单元测试
【发布时间】:2018-02-20 10:18:10
【问题描述】:

我有一个类,其中包含我要模拟的方法。

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

MyClass myClass = Spy(MyClass)

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

MyClass myClass = new MyClass()

当类是 Spy 时,如何在 Spock 测试中获取日志消息?

【问题讨论】:

  • 查看您的另一个 Spock 问题,您似乎对如何正确测试代码有一些奇怪的看法。但无论如何,如果您愿意提供MCVE 作为 SO 的良好做法,我愿意看看您的问题。可能其他人也会。我想看看你想要测试的什么,而不仅仅是你认为应该怎么做。

标签: java logging groovy spock


【解决方案1】:

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

假设使用 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());
        }
    }
}

我认为 Spy 对此没有任何帮助,因为它监视对象的方法,而不是其内部行为。

【讨论】:

    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多