Ожидаемое исключение не пойман или не брошен? - PullRequest
1 голос
/ 31 января 2012

Я тестирую функцию, позволяющую подключаться к 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");
    }
}

Я хочу проверить, вызывает ли метод 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 ]

2 голосов
/ 31 января 2012

похоже, что вы сами ловите исключение в своем коде Если вы вызываете метод 'connectFTP' извне (не имеет значения, является ли он юнитом или нет, он просто не выдаст исключение. Вот почему ваш JUnit не работает.

Кстати, было бы лучше не работать напрямую с Exception, но с его подтипом, соответствующим вашему случаю.

2 голосов
/ 31 января 2012

Причина, по которой тест не проходит, состоит в том, что он ожидает создания исключения, но исключение перехватывается внутри метода connectFTP, который затем возвращает false.

Вернете ли вы false в случае сбоя соединения или выбросите исключение, зависит от семантики вашего кода.Исходя из логического возвращаемого значения, кажется, что вы ожидаете, что false будет возвращено при возникновении исключения.В этом случае вы захотите сделать

org.junit.Assert.assertFalse(connectionSuccess); 

вместо использования (ожидается = Exception.class) в аннотации @Test.

...