2016-06-21 44 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测试类的外部过程中启动测试环境。

相关问题