java模拟记录器。使用jmock的getLogger()
我正在处理遗留代码,并使用jmock编写一些junit测试(我知道,顺序错误,没关系)(这也不是我的选择,对此我无能为力),我有一个类,它可以进行一些详细的日志记录,通常会弄乱字符串。我们使用log4j进行日志记录,我想测试那些记录的消息。我想模仿Logger类,但我不知道怎么做
我们通常会这样做:
private static final Logger LOG = Logger.getLogger(SomeClass.class);
有人知道如何模仿这个方法吗。getLogger(类)或任何其他方法如何检查已记录的内容
# 1 楼答案
您可以编写自己的appender并将所有输出重定向到它
# 2 楼答案
我发现的最简单的方法是在JMockit中使用模拟log4j对象
您只需要添加注释
对于您的测试类,tester类涉及的所有代码都将使用模拟记录器对象
见this
但这不会记录消息。使用此工具,您可以摆脱处理静态对象的麻烦
# 3 楼答案
请勾选类似问题: How to mock with static methods?
顺便说一句,搜索你的问题的现有答案比发布问题并等待答案更容易
# 4 楼答案
如果你真的认为你需要这样做,那么你需要看看PowerMock。更具体地说,它是mock static methods的能力。PowerMock与EasyMock和Mockito进行了集成,但是如果您必须坚持这一点的话,对它的一些研究可能会导致您也找到一个JMock集成
话虽如此,我认为设置您的测试框架,使其在不影响测试的情况下良好地记录,和确保您的测试不依赖于记录的内容是更好的方法。我曾经不得不维护一些单元测试来检查记录的内容,它们是我见过的最脆弱、最无用的单元测试。我一有时间就重写了