有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java模拟记录器。使用jmock的getLogger()

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

我们通常会这样做:

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

有人知道如何模仿这个方法吗。getLogger(类)或任何其他方法如何检查已记录的内容


共 (4) 个答案

  1. # 1 楼答案

    您可以编写自己的appender并将所有输出重定向到它

  2. # 2 楼答案

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

    您只需要添加注释

    @UsingMocksAndStubs(Log4jMocks.class)
    

    对于您的测试类,tester类涉及的所有代码都将使用模拟记录器对象

    this

    但这不会记录消息。使用此工具,您可以摆脱处理静态对象的麻烦

  3. # 3 楼答案

    请勾选类似问题: How to mock with static methods?

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

  4. # 4 楼答案

    如果你真的认为你需要这样做,那么你需要看看PowerMock。更具体地说,它是mock static methods的能力。PowerMock与EasyMock和Mockito进行了集成,但是如果您必须坚持这一点的话,对它的一些研究可能会导致您也找到一个JMock集成

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