2017-02-21 57 views
1

我正在使用log4j来记录消息,而log4j属性来自用户。我用PropertyConfigurator.configure(Properties)来配置用户提供的属性。如何使用PowerMockito模拟PropertyConfigurator.configure()?

在编写测试用例时,我使用PowerMock模拟PropertyConfigurator并配置了方法。 configure()方法是一种无效的静态方法。试图这样做时,我收到了空指针异常。任何方式来做到这一点?

我曾尝试做

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

这是行不通的。

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

回答

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级和嘲笑配置方法:

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