我有一个如下代码:
public start() {
..............
..............
ImpAbc abc = extract(ImplObj);
...............
}
public ImpAbc extract(Impl ImplObj) {
................
File BuildPath = File.createTempFile("xyz", ".zip");
ImpAbc abc = ImplObj.downloadImp(Integer.parseInt(rev.trim()), BuildPath,
conn);
.................
return abc;
}
我正在测试调用start()
方法的方法extract()
。我想模拟方法downloadImp(..)
,因为它是第三方API,并在内部调用许多其他方法。
但问题是downloadImp(..)
将临时文件作为输入,当我使用when().thenReturn()
时,如下所示,它不会调用mocked方法,因为临时文件每个都有一个唯一的名称时间。
我尝试的是:
Impl mockImplObj = mock(Impl.class);
ImpAbc mockImpAbc = mock(ImpAbc.class);
when(mockImplObj.downloadImp(Integer.parseInt(rev.trim()), File.createTempFile("xyz", ".zip"),
mockconn).thenReturn(mockImpAbc);
任何人都可以帮忙解决问题吗?
答案 0 :(得分:0)
问题的根源在于你对File.createTempFile
有一个静态依赖关系,而静态依赖关系是用模拟进行单元测试的致命错误。
在extract()
之外创建临时文件并将其传入。
public start() {
...
File buildPath = File.createTempFile("xyz", ".zip");
ImpAbc abc = extract(ImplObj, buildPath);
}
public ImpAbc extract(Impl ImplObj, File buildPath) {
...
ImpAbc abc = ImplObj.downloadImp(Integer.parseInt(rev.trim()), buildPath,
conn);
...
return abc;
}
现在,您的测试方法中没有依赖File.createTempFile
。
答案 1 :(得分:0)
使用任何:
import org.mockito.Matchers;
...
when(mockImplObj.downloadImp(Integer.parseInt(rev.trim()), Matchers.any(File.class)).thenReturn(mockImpAbc);