Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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 Powermock:模拟静态最终记录器_Java_Unit Testing_Logging_Mockito_Powermockito - Fatal编程技术网

Java Powermock:模拟静态最终记录器

Java Powermock:模拟静态最终记录器,java,unit-testing,logging,mockito,powermockito,Java,Unit Testing,Logging,Mockito,Powermockito,我正在尝试编写测试来检查是否记录了某些行。我在谷歌上搜索了一会儿,但我不明白为什么LOG没有被替换 要测试的类: public class Example { private static final Logger LOG = LoggerFactory.getLogger(Example.class); public void foo(...) { if(...) LOG.warn("Warning"); //...

我正在尝试编写测试来检查是否记录了某些行。我在谷歌上搜索了一会儿,但我不明白为什么
LOG
没有被替换

要测试的类:

public class Example {
    private static final Logger LOG = LoggerFactory.getLogger(Example.class);

    public void foo(...)
    {
       if(...)
         LOG.warn("Warning");
       //...
    }
}
测试:

使用SLF4J和PowerMock 1.7.1


PS:在本项目中,替换
私有静态最终记录器日志
不是选项。

您创建主题太早了。在创建主题之后,可以很好地安排模拟

在安排静态模拟之后创建主题

@RunWith(PowerMockRunner.class)
@PrepareForTest({LoggerFactory.class})
public class MyTest {

    @Test
    public void test1() {
        //Arrange
        Logger logger = PowerMockito.mock(Logger.class);

        PowerMockito.mockStatic(LoggerFactory.class);           
        PowerMockito.when(LoggerFactory.getLogger(Example.class)).thenReturn(logger);

        Example example = new Example();

        //Act
        example.foo(..);

        //Assert
        Mockito.verify(logger).warn("Warning");
    }
}

你创建主题太早了。在创建主题后,您可以很好地安排模拟。谢谢。所以我也必须避免@injectmock@NoobieNoob这并不是说你必须避免它们。这是因为在这种情况下不需要它们。
@RunWith(PowerMockRunner.class)
@PrepareForTest({LoggerFactory.class})
public class MyTest {

    @Test
    public void test1() {
        //Arrange
        Logger logger = PowerMockito.mock(Logger.class);

        PowerMockito.mockStatic(LoggerFactory.class);           
        PowerMockito.when(LoggerFactory.getLogger(Example.class)).thenReturn(logger);

        Example example = new Example();

        //Act
        example.foo(..);

        //Assert
        Mockito.verify(logger).warn("Warning");
    }
}