编写功能测试时在 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()));
我有一个安装 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()));