1

FTPサーバーへの接続を許可する機能をテストしています。

これは、適切に機能する私のテストの1つです。

@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動作しません。

ところで、例外を直接操作するのではなく、ケースに関連するサブタイプを使用する方がよいでしょう。

于 2012-01-31T18:19:18.300 に答える