我写了一个Java类,其中一个试图访问FTP。
我在Eclipse上工作,我想对此进行Junit测试。我知道如何测试公共类,但是我只能测试静态的void main方法。
这是我的ftp.java类:
public class ftp {
public static void main(String[] args) {
FTPClient client = new FTPClient();
try {
client.connect("host");
// Try to login and return the respective boolean value
boolean login = client.login("login", "pass");
// If login is true notify user
if (login) {
System.out.println("Connection established...");
// Try to logout and return the respective boolean value
boolean logout = client.logout();
// If logout is true notify user
if (logout) {
System.out.println("Connection close...");
}
// Notify user for failure
} else {
System.out.println("Connection fail...");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// close connection
client.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
我开始像这样创建ftpTest.java:
public class ftpTest {
ftp testaccess = new ftp();
FTPClient testclient = ftp.client;
@Test
public void testftp() {
fail("Not yet implemented");
}
}
任何帮助将不胜感激。
谢谢!
答案 0 :(得分:2)
由于您没有使用命令行参数,也没有看到任何env显式属性,因此您可以重构代码并将所有内容移至单独的方法并在此处进行测试。
如果要进行集成测试,则可能必须旋转一个功能全面的ftp服务器,但这对单元测试来说有点超出范围。
答案 1 :(得分:0)
@Test
public void testftp() {
FtpClient.main(new String[0]);
}
那当然令人失望。
@Test
public void testftp() {
PrintStream old = System.out;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream out = new PrintStream(baos);
System.setOut(out);
FtpClient.main(new String[0]);
System.out.flush();
System.setOut(old);
String s = new String(baos.toByteArray(), Charset.defaultCharset());
... check s
}
捕获输出可以提供更多的见解。