在测试和部署之间交换 Guice 模块

问题描述 投票:0回答:1

我有两个由 Guice 注入的非关键服务的实现。这些实现将结果发布到另一个系统。当我在本地运行时,无法连接到其他系统。我有两个实现发布接口的类:

RealPublisher
EchoPublisher
。 EchoPublisher 记录它传递的内容并返回成功。当我测试应用程序时,我使用
EchoPublisher
。我需要在部署时将其更改为
RealPublisher

我可以看到通过

@Provides
方法来检测环境并返回正确的实现。或者在构建注入器时更换整个模块。

我的构建系统是 Gradle,当它用于启动应用程序时,它不会设置像 Bazel 这样的任何环境变量(据我所知),所以我需要一些其他方法来检测环境。有

Guice.Stage
值,可以通过
@Provides
方法轻松实现这一点。当然,我也必须知道何时切换该标志。

是否有一个好方法来处理交换实现,而不必记住每次都手动执行?

gradle guice
1个回答
0
投票

执行此操作的一种简单方法是在测试时设置系统属性:

// build.gradle
test {
    systemProperty("IS_UNDER_TEST", "true")
}

然后在您的应用程序中,您可以在进行 Guice 绑定时检查此属性是否存在,并在检测到时绑定您的测试对象

EchoPublisher

© www.soinside.com 2019 - 2024. All rights reserved.