- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些连接到 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 服务器已关闭。我想确保在这种情况下,我的软件能够做出适当的响应。我在模拟 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 对象,但我无法从文档中弄清楚如何获取要发送的有效对象。有人知道如何处理吗?
谢谢。
最佳答案
既然没有人在这里试一试,我就试一试。我以前从未使用过 MockFtpServer,所以这是我的第一次尝试。
在我看来,测试服务器是否已关闭的最简单方法就是关闭服务器。
@Test(expected = IOException.class)
public void testConnectToFTPServer_ServerDown() throws Exception {
// kill the server
server.stop();
service.connectToFTPServer("testdomain.org", controllerPort);
}
如果你想测试用户名和密码是否无效,也许你可以将 FTP 回复代码设置为 430:-
@Test(expected = IllegalStateException.class)
public void testConnectToFTPServer_InvalidUserPassword() throws Exception {
// assuming you already started it in setup(), you may want to stop it first
if (server.isStarted()) {
server.stop();
}
ConnectCommandHandler connectCommandHandler = (ConnectCommandHandler) server.getCommandHandler(CommandNames.CONNECT);
// 430 = FTP error code for "Invalid username or password"
connectCommandHandler.setReplyCode(430);
server.setCommandHandler(CommandNames.CONNECT, connectCommandHandler);
server.start();
service.connectToFTPServer("testdomain.org", controllerPort);
}
我知道您想测试 SocketClient.connect()
抛出的 SocketException
异常……而这个异常在这里有点棘手。基于FTP error codes ,我相信您正在寻找 10000 系列错误代码之一(如果我在这里错了请纠正我,但我不是 FTP 专家)。这个 10000 系列错误代码的问题是它会使您的测试无限期地旋转,因为该错误代码指示无法连接远程服务器,因此在针对 MockFtpServer 进行测试时,测试并不知道何时停止。所以,在这种情况下,我将测试设置为 5 秒后超时(我认为这是合理的)。当然,您不会在此处抛出 SocketException
,但我认为该行为与实际实现代码足够接近。
@Test(timeout = 5000)
public void testConnectToFTPServer_InvalidHostName() throws Exception {
// assuming you already started it in setup(), you may want to stop it first
if (server.isStarted()) {
server.stop();
}
ConnectCommandHandler connectCommandHandler = (ConnectCommandHandler) server.getCommandHandler(CommandNames.CONNECT);
// 10060 = FTP error code for "Cannot connect to remote server."
connectCommandHandler.setReplyCode(10060);
server.setCommandHandler(CommandNames.CONNECT, connectCommandHandler);
server.start();
service.connectToFTPServer("testdomain.org", controllerPort);
}
关于java - 如何让 MockFTPServer 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13243039/
我有一些连接到 FTP 服务器的代码,我正在尝试为该代码编写测试用例。为此,我一直在尝试使用 MockFtpServer 来模拟 FTP 服务器,以便测试我的交互。 http://mockftpser
我的 JUnit 测试跟踪失败。错误是java.lang.NullPointerException,它发生在这些代码行中: @AfterClass public static void aft
我正在使用 JCraft 的 JSch 库作为我的程序的 FTP 客户端,它工作正常。但我在创建用于单元测试的模拟(MockFtpServer)时遇到了困难。 import com.jcraft.js
我是一名优秀的程序员,十分优秀!