【问题标题】:Java - test a public static void main method with JUnitJava - 使用 JUnit 测试公共静态 void 主方法
【发布时间】:2019-08-20 05:35:57
【问题描述】:

我编写了一个 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");
    }

}

任何帮助将不胜感激。
谢谢!

【问题讨论】:

  • 我已经找到了那个帖子,但我无法用它来解决我的问题。更重要的是,FTP 连接看起来非常具体。
  • 啊哈,与其测试 main 函数,不如测试 main 中给出的代码。那是另一种野兽。就像触发那些异常一样。

标签: java junit


【解决方案1】:
@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
}

捕获输出可以提供更多洞察力。

【讨论】:

  • 感谢您帮助我。我不明白你为什么在 public void testftp() 中引用方法 main() ?
【解决方案2】:

由于您没有使用命令行参数,而且我也没有看到任何 env 显式属性,因此您重构了代码并将所有内容移至单独的方法并在那里进行测试。

如果您想进行集成测试,您可能需要启动一个成熟的 ftp 服务器,但这有点超出了单元测试的范围。

【讨论】:

    猜你喜欢
    • 2014-01-05
    • 2010-10-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多