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仕様では、接続しようとすると例外がスローされる可能性があることが示されています。
スローされる例外をテストする2番目のテストケースを作成したいと思います。これは、ドメイン名が正しくないか、FTPサーバーがダウンしている場合に発生する可能性があります。そのような場合、私のソフトウェアが適切に応答することを確認したいと思います。Mock 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オブジェクトが必要ですが、ドキュメントから、有効なオブジェクトを送信する方法を理解できません。これを実行する方法を知っている人はいますか?
ありがとう。