Java 模拟以临时文件作为输入的方法
我有如下代码:Java 模拟以临时文件作为输入的方法,java,unit-testing,mocking,mockito,Java,Unit Testing,Mocking,Mockito,我有如下代码: public start() { .............. .............. ImpAbc abc = extract(ImplObj); ............... } public ImpAbc extract(Impl ImplObj) { ................ File BuildPath = File.createTempFile("xyz", ".zip"); ImpAbc ab
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;
}
我正在测试调用extract()
方法的方法start()
。我想模拟方法downloadImp(..),因为它是第三方API,并且在内部调用许多其他方法
但问题是downloadImp(..)
将临时文件作为输入,当我使用when().thenReturn()
时,它不会调用mock方法,因为临时文件每次都有一个唯一的名称
我尝试的是:
Impl mockImplObj = mock(Impl.class);
ImpAbc mockImpAbc = mock(ImpAbc.class);
when(mockImplObj.downloadImp(Integer.parseInt(rev.trim()), File.createTempFile("xyz", ".zip"),
mockconn).thenReturn(mockImpAbc);
有人能帮你解决这个问题吗?问题的根源在于你对
文件.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;
}
现在,在测试的方法中,对文件.createTempFile
没有依赖关系。使用任何:
import org.mockito.Matchers;
我试过这个。非常感谢。如果我想将一个参数作为匹配器传递,那么所有参数都应该作为匹配器传递,这是一个小改动。例如当(mockImplObj.downloadImp(Matchers.any(Integer.class)、Matchers.any(File.class)、Matchers.any(ConnectionParams.class))。然后返回(mockImpAbc);
when(mockImplObj.downloadImp(Integer.parseInt(rev.trim()), Matchers.any(File.class)).thenReturn(mockImpAbc);