我正在为我的项目创建 junit 测试用例。我有下面的代码,我想在其中创建一个模拟,
String propertyFilePath = System.getProperty("path.to.properties");
Resource propertyFile = new FileSystemResourceLoader().getResource(propertyFilePath);
Properties properties = PropertiesLoaderUtils.loadProperties(propertyFile);
我正在使用 junit 和 mockito-core jar。我尝试使用以下代码,
System.setProperty("path.to.properties", "dummyPathToProperties"); //invalid Path
Properties properties = mock(Properties.class);
Resource propertyFile = new FileSystemResourceLoader().getResource("dummyPathToProperties");
when(PropertiesLoaderUtils.loadProperties(propertyFile)).thenReturn(properties);
使用上面的代码,它在模拟加载属性方法时抛出错误。如何模拟 Spring 静态类并返回我的模拟属性对象?
任何帮助将不胜感激。
模拟静态方法需要你走完整九码并使用PowerMock。例如,模拟静态方法的确切步骤在其文档中概述。
基本上:
- 在测试用例的类级别使用 @RunWith(PowerMockRunner.class) 注释。
- 在测试用例的类级别使用 @PrepareForTest(ClassThatContainsStaticMethod.class) 注释。
- 使用 PowerMock.mockStatic(ClassThatContainsStaticMethod.class) 来模拟此类的所有方法。
- 使用 PowerMock.replay(ClassThatContainsStaticMethod.class) 将类更改为重播模式。
- 使用 PowerMock.verify(ClassThatContainsStaticMethod.class) 将类更改为验证模式。
但是,当然:考虑不使用PowerMock;通过更改代码,这样您就不必模拟静态调用。但是,当然,在这种框架提供的静态方法周围添加一个包装器有点奇怪。