0

我正在为我的项目创建 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);

使用上面的代码,它在模拟 loadProperties 方法时会引发错误。如何模拟 spring 静态类并返回我的模拟属性对象?

任何帮助将不胜感激。

4

1 回答 1

0

模拟静态方法需要你走完整的九码并使用 PowerMock。例如,在他们的文档中概述了模拟静态方法的确切步骤。

在本质上:

  • 在测试用例的类级别使用 @RunWith(PowerMockRunner.class) 注释。
  • 在测试用例的类级别使用 @PrepareForTest(ClassThatContainsStaticMethod.class) 注释。
  • 使用 PowerMock.mockStatic(ClassThatContainsStaticMethod.class) 模拟该类的所有方法。
  • 使用 PowerMock.replay(ClassThatContainsStaticMethod.class) 将类更改为重播模式。
  • 使用 PowerMock.verify(ClassThatContainsStaticMethod.class) 将类更改为验证模式。

但当然:考虑使用 PowerMock;通过更改您的代码,这样您就不必模拟静态调用。但是,当然,在这样一个框架提供的静态方法周围添加一个包装器有点奇怪。

于 2017-04-12T09:19:43.323 回答