未被捕获或未被抛出的预期异常?

时间:2012-01-31 18:13:56

标签: java exception junit junit4 socketexception

我正在测试一个允许连接到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;
}

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

2 个答案:

答案 0 :(得分:2)

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

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

org.junit.Assert.assertFalse(connectionSuccess); 

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

答案 1 :(得分:2)

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

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