我已经得到了这段代码,我想用powermockito进行模拟:
long size = FileUtility.getFileFromPath(uri.getPath()).length())
这种静态方法的实现很简单:
public static File getFileFromPath(String filePath) {
return new File(filePath);
}
现在,当我在测试中编写这段代码时,测试失败了。
PowerMockito.mockStatic(FileUtility.class);
File fileMock = mock(File.class);
PowerMockito.when(FileUtility.getFileFromPath(anyString())).thenReturn(fileMock);
Mockito.doReturn(12).when(fileMock.length());
有这个例外:
org.mockito.exceptions.misusing.UnfinishedStubbingException:
Unfinished stubbing detected here:
-> at nl.mijnverzekering.entities.declareren.NotaPdfMetadataTest.mockFileSize(NotaPdfMetadataTest.java:273)
E.g. thenReturn() may be missing.
Examples of correct stubbing:
when(mock.isOk()).thenReturn(true);
when(mock.isOk()).thenThrow(exception);
doThrow(exception).when(mock).someVoidMethod();
Hints:
1. missing thenReturn()
2. you are trying to stub a final method, you naughty developer!
3: you are stubbing the behaviour of another mock inside before 'thenReturn' instruction if completed
之前我已经看过错误(我应该将 mock(File.class)提取到一个单独的变量,就像我现在做的那样)。 这里出了什么问题?是因为我使用模拟对象作为返回值吗?怎么解决?
解决方案解决方案: 当然,如果我将此方法添加到FileUtility中,我的测试将会成功:
public static long getFileSizeFromFilePath(String filePath) {
return getFileFromPath(filePath).length();
}
然后简单地
PowerMockito.mockStatic(FileUtility.class);
PowerMockito.when(FileUtility.getFileSizeFromFilePath(anyString())).thenReturn(size);
但是我想阻止在我的FileUtility中添加那些不必要的方法列表(并理解异常的原因)
答案 0 :(得分:0)
这里出了什么问题?是因为我使用的是模拟对象 回报价值?怎么解决?
这一行错了:
null
签名是Mockito.doReturn(12).when(fileMock.length());
,因此应该传递模拟,但不是方法调用:
T when(T mock)
这也可行:
Mockito.doReturn(12L).when(fileMock).length();