我有一些代码连接到FTP服务器,我正在尝试为该代码编写测试用例。为此,我一直试图使用MockFtpServer来模拟FTP服务器,以便测试我的交互。如何使MockFTPServer抛出异常
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服务器已关闭。我想确保在这种情况下,我的软件能够做出适当的回应。我在模拟FTP服务器网站上找到了关于“自定义命令处理程序”的信息,但我无法弄清楚如何让其抛出异常。这是我有:
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对象,但我想不通,从文档,如何得到有效的对象发送有谁知道去解决这个问题?
谢谢。
感谢您的建议,limc。一对夫妇笔记...对于一个,你不需要停止服务器,以取代CommandHandler的功能 - 它只是有助于保持代码更清洁。对于一些事情,比如测试一个错误的密码,只需发送一个错误的密码并获得正确的回复代码就够了。在这方面非常方便的是做一些类似于你的最终测试的东西,在这个测试中,你返回一个10060的回复代码,显示那里有一个套接字,但不接受连接。 – McGlone