5

我想为尝试将消息发布到 AWS SNS 的应用程序运行功能测试。我尝试了 LocalStack,发现它可以完成我在本地模拟和发布消息所需的一切。但是我的应用程序使用 amazon sdk client for java,当我在本地运行它时,它仍然尝试将请求发布到亚马逊区域而不是 LocalStack

确保应用程序与本地堆栈而不是 AWS URL 交互所需的配置是什么?我们可以在 AWS config 中指定端点 URL 吗?我发现这是 AWS CLI https://github.com/aws/aws-cli/issues/1270中的一个未解决问题

是否有人为此实施了任何解决方法?

4

2 回答 2

11

要使用你的 localstack,你必须设置你的EndpointConfiguration

AmazonSNS amazonSNS = AmazonSNSClientBuilder.standard()
  .withEndpointConfiguration(new EndpointConfiguration("http://localhost:4575", "eu-west-1")) 
  .build();

您还应该使用localstack/localstack而不是atlassian/localstack(不再积极维护)。

于 2018-01-21T16:15:47.813 回答
1

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

public static class Endpoint implements AWSEndpoint {
    @Override
    public String url() { return "http://localhost:4575"; }

    @Override
    public String region() { return "us-east-1"; }

    @Override
    public String accessKey() { return ""; }

    @Override
    public String secretKey() { return ""; }
}

@ExtendWith(SNS.class)
class AmazonDynamoDBInjectionTest {
    @AWSClient(endpoint = Endpoint.class)
    private AmazonSNS client;

    @Test
    void test() throws Exception {
        Assertions.assertNotNull(client);

        …
    }
}
于 2019-09-28T17:17:49.573 回答