如何使用PowerMockito模拟PropertyConfigurator.configure()?

时间:2017-02-21 14:00:14

标签: java log4j mockito powermockito

我使用log4j来记录消息,而log4j属性来自用户。我使用PropertyConfigurator.configure(Properties)来配置用户提供的属性。

在编写测试用例时,我正在使用PowerMock来模拟PropertyConfigurator并配置方法。 configure()方法是一种void静态方法。我试图这样做时得到nullpointer异常。有办法吗?

我尝试过做

PowerMockito.mockStatic(PropertyConfigurator.class);
PowerMockito.doNothing().when(PropertyConfigurator.class);
PropertyConfigurator.configure(slf4jPropertiesMock);

这不起作用。

如果可能的话,有没有其他方法可以在不使用PropertyConfigurator.configure(Properties)的情况下获取seme结果?在这种情况下,单元测试将很容易。

1 个答案:

答案 0 :(得分:0)

确保您在测试类中使用此配置:

@RunWith(PowerMockRunner.class) 
@PrepareForTest(PropertyConfigurator.class)
public class Test{

你的嘲笑应该是这样的:

PowerMockito.doNothing().when(PropertyConfigurator.class)
      .configure(Mockito.any(Properties.class);

没有PowerMockito

PropertyConfigurator.configure(Properties)个调用包装到包方法中:

public class C{
   ...
   void configure(Properties p){
     PropertyConfigurator.configure(p);
   }

监视C类并模拟configure方法:

C c = new C();
C sSpy = Mockito.spy(c);
Mockito.doNothing().when(c).configure(Mockito.any(Properties.class);