2016-06-21 114 views
1

我需要幫助來在Java中使用Mockito來模擬aws apis。正如我試圖嘲笑RDS連接,但連接返回空語句對象。我必須模擬S3,AWS數據管道,JavaSaprkContext,RDS連接,Lambda,SNS和DynamoDB。如何在java中使用Mockito模擬AWS API

這裏是我的RDS連接代碼,返回空語句對象:

public void testGetRDSConnection() throws SQLException{ 
    Connection connection = mock(Connection.class); 
    Statement stmt = null; 
    stmt = connection.createStatement(); // Get NULL statement Object 
    ResultSet rs = stmt.executeQuery("SELECT * FROM table"); 
    if (rs.next()) { 
     System.out.println("+ve Test is PASSED Name = testGetRDSConnection "); 
    } else { 
     System.out.println("+ve Test is FAILED Name= testGetRDSConnection "); 
    } 

} 

和測試用例S3,即返回null元數據對象:

public void testGetObjectMetadata(){ 

    ObjectMetadata obj = S3Util.getObjectMetadata(mock(AmazonS3Client.class), bucketName, filePath); 
    if (obj == null) { 
     System.out.println("+ve Test is FAILED Name= 'testGetObjectMetadata()' No metadata found"); 
     fail("+ve Test is FAILED Name= 'testGetObjectMetadata()' No metadata found"); 

    } else if (obj != null) { 
     System.out.println("+ve Test is FAILED Name= 'testGetObjectMetadata()'"); 

    } 
} 
+1

你的第一個測試是一個單元測試,旨在測試'Statement'。你的第二個測試是一個旨在測試'S3Util'的單元測試。我假設這些都不是你自己的代碼。 – Compass

+0

換句話說,您提供的代碼段都沒有測試主題。你的測試目標是什麼?除了API代碼之外,您都不能提供任何類型的目標,這不應該是需要檢查的東西。 – Compass

回答

0

Never mock APIs/types,你不知道他們的行爲。更好的解決方案是添加您自己的API,其中一個實現將是AWS。然後你可以模擬你自己的API

+0

您可以使用任何AWS服務共享一段說明您評論的代碼 – aqsa93

0

有一些非常複雜的雲服務模擬框架,例如moto有一個模擬實現,其功能與實際的S3 API非常相似。

您還可以看看LocalStack,這個框架結合了現有工具並提供了可用於集成測試的全功能本地雲環境。

儘管其中一些工具是用其他語言(Python,Node.js)編寫的,但應該很容易在Java測試類的外部過程中啓動測試環境。

相關問題