我使用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结果?在这种情况下,单元测试将很容易。
答案 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);