有什么方法可以模拟Files.write(...)方法吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有什么方法可以模拟Files.write(...)方法吗?相关的知识,希望对你有一定的参考价值。

我需要单元测试用例的帮助。我想模拟write(Path path, byte[] bytes, OpenOption... options)类的静态方法java.nio.file.Files

我试过例如。以这种方式:

PowerMockito.doReturn(path).when(Files.class, "write", path, someString.getBytes());

在这种情况下,找不到该方法。

PowerMockito.doReturn(path).when(Files.class, PowerMockito.method(Files.class, "write", Path.class, byte[]
            .class, OpenOption.class));

这次我有UnfinishedStubbingException

我该怎么做对吗?

答案

我只有一个服务写入文件系统,所以我决定只使用Mockito:

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.anyVararg;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.springframework.test.util.ReflectionTestUtils;

Path mockPath = mock(Path.class);
FileSystem mockFileSystem = mock(FileSystem.class);
FileSystemProvider mockFileSystemProvider = mock(FileSystemProvider.class);
OutputStream mockOutputStream = mock(OutputStream.class);
when(mockPath.getFileSystem()).thenReturn(mockFileSystem);
when(mockFileSystem.provider()).thenReturn(mockFileSystemProvider);
when(mockFileSystemProvider.newOutputStream(any(Path.class), anyVararg())).thenReturn(mockOutputStream);
when(mockFileSystem.getPath(anyString(), anyVararg())).thenReturn(mockPath);

// using Spring helper, but could use Java reflection
ReflectionTestUtils.setField(serviceToTest, "fileSystem", mockFileSystem);

只需确保您的服务执行以下调用:

Path path = fileSystem.getPath("a", "b", "c");
Files.write(path, bytes);

以上是关于有什么方法可以模拟Files.write(...)方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 依赖注入:啥时候需要?啥时候可以模拟 Facades?两种方法的优点?

有啥方法可以在 Spock 中进行模拟参数捕获

使用 Mockito 时,模拟和间谍有啥区别?

我可以模拟超类方法调用吗?

有啥方法可以区分在 iPhone 模拟器和实时设备上运行的代码吗? [复制]

新手,python怎么模拟网页按钮点击