如何使用Java中使用Mockito嘲笑AWS API



我需要帮助使用Java中使用Mockito模拟AWS API。由于我试图模拟RDS连接,但连接返回NULL语句对象。我必须模拟S3,AWS数据管道,JavaSaprkContext,RDS Connection,Lambda,SNS和DynamoDB。

这是我用于RDS连接的代码,它返回null语句对象:

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()'");
    }
}

除了Whummer和Shachar的答案外:

如果您是幸运的Junit 5用户,请让我推荐您为AWS*的Junit 5扩展名*,一些Junit 5扩展名可用于测试与AWS相关的代码。这些扩展名可用于为AWS服务客户端提供由LocalStack(或真实的)提供的客户端注入客户端。支持两个AWS Java SDK V 2.x和V 1.x。

*我维护此库

永远不要模拟您不知道它们的行为的API/类型。一个更好的解决方案是添加自己的API,即其实施之一将是AWS。然后,您可以模拟自己的API

那里有一些相当复杂的云服务模拟框架,例如,Moto具有模拟实现,其功能与实际的S3 API非常相似。

您还可以查看LocalStack,该框架结合了现有工具并提供了功能齐全的本地云环境,可用于集成测试。

尽管其中一些工具是用其他语言编写的(python,node.js),但在Java测试类中的外部过程中旋转测试环境应该很容易。

相关内容

  • 没有找到相关文章

最新更新