编写功能测试时在 google guice 中覆盖端点的最简单方法

Simplest way to override an endpoint in google guice when writing functional tests

我有一个安装 DynamoDB 模块的应用程序模块

install(new DynamoDBModule());

在 DynamoDBModule 中,我们有一些代码来构建 DynamoDb 客户端并初始化映射器

 AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
        .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://prod-endpoint:8000", "us-west-2"))
        .build();

现在,当我编写测试时,我必须用本地端点替换此 dynamoDB 端点,我想知道执行此操作的最简单方法是什么。我知道这一点 Whosebug question,但这意味着只为一个小的更改编写大量代码。我将不得不创建一个模拟 dynamodb 模块,一个模拟应用程序模块,然后我可以 运行 在我的测试中做类似的事情

Guice.createInjector(Modules.override(new AppModule()).with(new TestAppModule()));

有没有一种简单的方法可以在 运行ning 测试时以某种方式使用或覆盖测试端点,否则继续使用 prod 端点。

EndpointConfiguration 配置为绑定并在 TestAppModule 中覆盖它。例如:

class DynamoDBModule {
   @Provides
   @Singleton
   AmazonDynamoDB provideAmazonDynamoDB(EndpointConfiguration endpointConfiguration) {
       return AmazonDynamoDBClientBuilder.standard()
          .withEndpointConfiguration(endpointConfiguration)
          .build()
   }

   @Provides
   @Singleton
   EndpointConfiguration provideEndpointConfiguration() {
       return new AwsClientBuilder.EndpointConfiguration("http://prod-endpoint:8000", "us-west-2");
   }
}

class TestAppModule {

   @Provides
   @Singleton
   EndpointConfiguration provideTestEndpointConfiguration() {
       return new AwsClientBuilder.EndpointConfiguration("test-value", "us-west-2");
   }
}

然后使用 Modules.override 方法,它应该有效:

Guice.createInjector(Modules.override(new AppModule()).with(new TestAppModule()));