2

我正在处理遗留代码并使用 jmock 编写一些 junit 测试(我知道,错误的顺序,没关系)(这也不是我的选择,我对此无能为力)并且我有一个类可以进行一些复杂的日志记录,弄乱字符串一般。我们正在使用 log4j 进行日志记录,我想测试那些记录的消息。我想过模拟 Logger 类,但我不知道该怎么做。

通常我们有这样的 Logger:

private static final Logger LOG = Logger.getLogger(SomeClass.class);

有谁知道如何模拟方法 .getLogger(class) 或任何其他想法如何检查究竟记录了什么?

4

4 回答 4

4

您可以编写自己的附加程序并将所有输出重定向到它。

于 2012-04-20T07:11:25.000 回答
3

如果你真的认为你需要这样做,那么你需要看看PowerMock。更具体地说,它能够模拟静态方法。PowerMock 与 EasyMock 和 Mockito 集成,但如果你必须坚持下去,一些搜索可能会导致你也找到 JMock 集成。

话虽如此,我认为设置您的测试框架以便它很好地记录而不影响您的测试,确保您的测试依赖于记录的内容是一种更好的方法。我曾经不得不维护一些检查记录内容的单元测试,它们是我见过的最脆弱和最无用的单元测试。我一有时间就重写了它们。

于 2012-04-20T07:12:03.693 回答
0

检查这个类似的问题: 如何使用静态方法进行模拟?

顺便说一句,搜索现有问题比发布问题并等待答案更容易。

于 2012-04-20T07:14:53.360 回答
0

我发现最简单的方法是在 JMockit 中使用模拟 log4j 对象。

您只需要添加注释

@UsingMocksAndStubs(Log4jMocks.class)

到您的测试类,测试类接触的所有代码都将使用模拟 Logger 对象。

看到这个

但这不会记录消息。你可以摆脱处理静态对象的麻烦。

于 2014-01-24T05:50:21.617 回答