2012-01-31 97 views
1

我正在测试一个允许连接到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()方法抛出一个异常时serveraddress为无效。

这里是我的测试:

@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

那么你是不是扔了'Exception' catch块,而不是返回false,重新抛出异常,否则就是吞下它。 – CoolBeans 2012-01-31 18:16:59

回答

2

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

当连接失败或抛出异常时您是否返回false取决于代码的语义。基于布尔返回值,看起来您希望在出现异常时返回false。在这种情况下,你会想要做

org.junit.Assert.assertFalse(connectionSuccess); 

而不是使用@Test注解(预期= Exception.class)。

2

它看起来像你自己在代码中捕获异常 如果你从外部调用方法'connectFTP'(不管它是否是junit,它都不会抛出异常。 这就是为什么你的JUnit不起作用。

BTW,这将是最好不要直接与异常的工作,但与有关你的情况下,它的亚型。

相关问题