Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用jmock模拟Logger.getLogger()_Java_Junit_Mocking_Log4j_Jmock - Fatal编程技术网

Java 使用jmock模拟Logger.getLogger()

Java 使用jmock模拟Logger.getLogger(),java,junit,mocking,log4j,jmock,Java,Junit,Mocking,Log4j,Jmock,我正在处理遗留代码,并使用jmock编写一些junit测试(我知道,顺序错误,没关系)(这也不是我的选择,对此我无能为力),我有一个类,它可以进行一些详细的日志记录,通常会弄乱字符串。我们使用log4j进行日志记录,我想测试那些记录的消息。我想模仿Logger类,但我不知道怎么做 我们通常会这样做: private static final Logger LOG = Logger.getLogger(SomeClass.class); 有没有人知道如何模拟method.getLogger(类)

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

我们通常会这样做:

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

有没有人知道如何模拟method.getLogger(类)或任何其他方法来检查到底记录了什么?

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

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


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

检查这个类似的问题:


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

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

您只需要添加注释

@UsingMocksAndStubs(Log4jMocks.class)
对于您的测试类,tester类涉及的所有代码都将使用模拟记录器对象


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

+1我也必须维护模拟记录器的测试。完全疯狂。不得不承认,我80%的“重写”都是点击了删除按钮;-)但这将意味着改变测试类,我不应该这样做(当然,除非我发现任何bug)。我也对这种情况感到不高兴,但现在,也许将来,我对此无能为力。无论如何,谢谢软件是软的-你应该能够改变它。让你自己和你的团队省去一些痛苦,现在就去和你的团队领导谈谈如何做出改变,而不是以后。问这个问题有什么害处?想想看——使用PowerMock会要求您如何更改已测试的类?哈!几个月前,我甚至这样做过,但都忘了。这就是我要做的,谢谢