如何在 Java 中使用 Mockito 模拟 AWS API

aqs*_*a93 6 java amazon-s3 mockito amazon-web-services

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

这是我的 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 ");
    }

}
Run Code Online (Sandbox Code Playgroud)

和 S3 的测试用例,返回空元数据对象:

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

    }
}
Run Code Online (Sandbox Code Playgroud)

mad*_*ead 6

除了whummershachar 的回答之外:

如果您是幸运的 JUnit 5 用户,请让我向您推荐适用于 AWS 的 JUnit 5 扩展*,一些 JUnit 5 扩展对于测试 AWS 相关代码可能很有用。这些扩展可用于为 localstack(或真实工具)等工具提供的 AWS 服务客户端注入客户端。支持 AWS Java SDK v 2.x 和 v 1.x。

*我维护这个库


sha*_*har 4

切勿模拟您不知道其行为方式的API/类型。更好的解决方案是添加您自己的 API,其实现之一是 AWS。然后你就可以模拟你自己的API

  • 这不是把问题进一步转移了一层吗? (17认同)
  • 您能否分享一段代码来说明您使用任何 AWS 服务的评论 (2认同)