我正在测试一个允许连接到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;
}
目前,测试不起作用。 谢谢你的帮助!
答案 0 :(得分:2)
测试未通过的原因是它期望抛出异常,但是异常被捕获在'connectFTP'方法中,然后返回false。
连接失败时是返回false还是抛出异常取决于代码的语义。根据布尔返回值,当出现异常时,您似乎期望返回false。在那种情况下,你会想要
org.junit.Assert.assertFalse(connectionSuccess);
而不是在@Test注释中使用(expected = Exception.class)。
答案 1 :(得分:2)
看起来你在代码中自己捕获异常 如果从外部调用方法'connectFTP'(无论是否为junit,它都不会引发异常。 这就是你的JUnit不起作用的原因。
顺便说一句,最好不要直接使用Exception,而是将其子类型与您的案例相关联。