Junit与Mockito的测试案例

时间:2017-04-12 09:12:32

标签: junit mockito powermock springmockito

我正在为我的项目创建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静态类并返回我的mock属性对象?

任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:0)

模拟静态方法要求你向下移动整整九码并使用PowerMock。模拟静态方法的确切步骤在其documentation中列出。

本质上:

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

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