1

我正在测试一个允许连接到 FTP 服务器的功能。

这是我的一个正常工作的测试:

@Test
public void connectTestValid()
{
    assetSource.setPassword("password");
    assetSource.setUsername("user");
    assetSource.setServerAddress("127.0.0.1");
    assetSource.setServerPort(21);
    connectionSuccess = false;

    connectionSuccess = ftpFolderTest.connectFTP(ftpClient);
    if (!connectionSuccess)
    {
        fail("Expected Connection success");
    }
}

我想测试 serverAddress 无效时 connectFTP() 方法是否抛出异常。

这是我的测试:

@Test(expected = Exception.class)
public void connectTestInvalidServerAddress()
{
    assetSource.setPassword("password");
    assetSource.setUsername("user");
    assetSource.setServerAddress("1");
    assetSource.setServerPort(21);
    connectionSuccess = false;

    connectionSuccess = ftpFolderTest.connectFTP(ftpClient);
}

这是我的功能:

protected boolean connectFTP(FTPClient ftp)
{
    try
    {

        ftp.connect(getAssetSource().getServerAddress());

        if (!ftp.login(getAssetSource().getUsername(), getAssetSource().getPassword()))
        {
            logger.error("Login Failed");
            ftp.disconnect();
            return connectionSuccess = false;
        }// if

        if (!FTPReply.isPositiveCompletion(ftp.getReplyCode()))
        {
            logger.error("Connection Failed");
            ftp.disconnect();
            return connectionSuccess = false;
        }// if
    }
    catch (Exception e)
    {
        e.printStackTrace();
        return connectionSuccess = false;
    }
    return connectionSuccess = true;
}

目前,测试不起作用。谢谢你的帮助!

4

2 回答 2

2

测试未通过的原因是它期望抛出异常,但异常被“connectFTP”方法捕获,然后返回false。

连接失败时返回 false 还是抛出异常取决于代码的语义。根据布尔返回值,您似乎希望在出现异常时返回 false。在这种情况下,你会想要做

org.junit.Assert.assertFalse(connectionSuccess); 

而不是在 @Test 注释中使用 (expected = Exception.class) 。

于 2012-01-31T18:18:14.760 回答
2

看起来您自己在代码中捕获了异常如果您从外部调用方法“connectFTP”(无论它是否为junit,它都不会引发异常。这就是为什么您的JUnit不起作用。

顺便说一句,最好不要直接使用 Exception,而是使用与您的案例相关的子类型。

于 2012-01-31T18:19:18.300 回答