Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模拟以临时文件作为输入的方法_Java_Unit Testing_Mocking_Mockito - Fatal编程技术网

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);