我有一些连接到 FTP 服务器的代码,我正在尝试为该代码编写测试用例。为此,我一直在尝试使用 MockFtpServer 来模拟 FTP 服务器,以便测试我的交互。
http://mockftpserver.sourceforge.net/index.html
在一种特殊情况下,我试图用一个看起来像这样的测试用例来测试我的“连接”方法:
public class FTPServiceTestWithMock {
private FakeFtpServer server;
private FTPService service;
private int controllerPort;
@Before
public void setup() {
server = new FakeFtpServer();
server.setServerControlPort(0); // Use free port - will look this up later
FileSystem fileSystem = new WindowsFakeFileSystem();
fileSystem.add(new DirectoryEntry("C:\\temp"));
fileSystem.add(new FileEntry("C:\\temp\\sample.txt", "abc123"));
server.setFileSystem(fileSystem);
server.addUserAccount(new UserAccount("user", "pass", "C:\\"));
server.start();
controllerPort = server.getServerControlPort();
service = new FTPService();
}
@After
public void teardown() {
server.stop();
}
@Test
public void testConnectToFTPServer() throws Exception {
String testDomain = "testdomain.org";
String expectedStatus =
"Connected to " + testDomain + " on port " + controllerPort;
assertEquals(
expectedStatus,
service.connectToFTPServer(testDomain, controllerPort)
);
}
}
这段代码完美运行——它设置了一个虚假的 FTP 服务器,并对我的代码进行测试,以确保它可以连接并返回适当的消息。
但是,我的 FTP 客户端的 API 规范显示,当我尝试连接时可能会引发异常。
我想编写第二个测试用例来测试抛出的异常,这可能是域名不正确或 FTP 服务器关闭。我想确保在这种情况下,我的软件能够做出适当的响应。我在 Mock FTP Server 站点中找到了有关“自定义命令处理程序”的信息,但我不知道如何让一个抛出异常。这就是我所拥有的:
public void testConnectToFTPServerConnectionFailed() throws Exception {
ConnectCommandHandler connectHandler = new ConnectCommandHandler();
connectHandler.handleCommand(/* Don't know what to put here */);
server.setCommandHandler(CommandNames.CONNECT, connectHandler);
}
handleCommand 方法需要一个 Command 对象和一个 Session 对象,但是我无法从文档中弄清楚如何获取要发送的有效对象。有谁知道该怎么做?
谢谢。