I am testing a function that permit to connect to FTP server.
Here is one of my test who works properly:
@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");
}
}
I want to test if the connectFTP() method throw an exception when the serverAddress is invalid.
Here is my test:
@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);
}
Here is my function:
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;
}
Presently, the test doesn’t work.
Thanks for your help!
The reason the test is not passing is that it is expecting an Exception to be thrown, but the exception is being caught inside the ‘connectFTP’ method, which is then returning false.
Whether you return false when connection fails or throw an exception depends on the semantics of your code. Based on the boolean return value, it seems like you’re expecting false to be returned when there is an exception. In that case you’ll want to do
instead of using (expected = Exception.class) in the @Test annotation.