gpt4 book ai didi

java - 文件系统到 FTPFile[]?

转载 作者:搜寻专家 更新时间:2023-11-01 03:11:31 25 4
gpt4 key购买 nike

我只是想知道是否有办法模拟 FTPFile 数组。我试图将一个伪造的 FTPFile[] 作为参数传递给我要测试的函数:

protected void indexFolder(FTPClient, FTPFile[], File, FTPFolderAssetSource);

顾名思义,我正在使用 FakeFtpServer 伪造我的 ftp 服务器。这个库允许以这种方式伪造 ftp 内容:

        fileSystem = new WindowsFakeFileSystem();
DirectoryEntry directoryEntry1 = new DirectoryEntry("c:\\");
directoryEntry1.setPermissions(new Permissions("rwxrwx---"));
directoryEntry1.setOwner(USER1);

FileEntry fileEntry1 = new FileEntry("c:\\data\\file1.txt", CONTENTS);
fileEntry1.setPermissionsFromString("rw-rw-rw-");
fileEntry1.setOwner(USER1);
fileEntry1.setGroup(GROUP);

fileSystem.add(directoryEntry1);
fileSystem.add(fileEntry1);

ftp = new FakeFtpServer();
ftp.setFileSystem(fileSystem);

现在,我如何使用文件系统来测试需要 FTPFile[] 作为参数的函数?

最佳答案

FTPFile 类没有什么特别之处可以防止模拟。不幸的是,使用 Mockito,you can not mock arrays ,因为它们是最终的。

此示例代码应演示问题:

import static org.mockito.Mockito.*;

import org.junit.Test;

public class TestMockArrays {
interface Animal {
String getName();
}

@Test
public void testMockArray() {
final Animal[] mockArray = mock(Animal[].class);

when(mockArray[0].getName()).thenReturn("cat");
when(mockArray[1].getName()).thenReturn("dog");
when(mockArray[2].getName()).thenReturn("fish");

print1st3(mockArray);
}

public static void print1st3(final Animal[] animals) {
System.out.println(animals[0].getName() + " " + animals[1].getName() + " " + animals[2].getName());
}
}

运行它,您会看到它产生一条错误消息,该消息明确指出了问题:

org.mockito.exceptions.base.MockitoException:无法模拟/监视类 [LTestMockArrays$Animal;

Mockito 无法模拟/监视以下内容: - 最后的类(class) - 匿名类 - 原始类型

最简单的解决方案是使用 Mockito 的扩展,例如 Powermock它通过使用字节码操作来绕过 Mockito 模拟能力的某些限制。然后您可以通过将以下注释添加到您的 junit 测试类来创建模拟数组:

@RunWith(PowerMockRunner.class) // Need to run with Powermock runner
@PrepareForTest(FTPFile[].class) // We prepare FTPFile[] class for test because it's final

然后在您的测试方法中,您将像往常一样创建 Mockito 模拟:

FTPFile[] mockFTPFiles = mock(FTPFile[].class);

关于java - 文件系统到 FTPFile[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9099378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com