2012-01-31 96 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,這將是最好不要直接與異常的工作,但與有關你的情況下,它的亞型。

相關問題