如何确保我的测试永远不会在Micronaut应用程序中使用生产MongoDB URI?
我目前在我的测试配置中使用嵌入式服务器来运行带有测试MongoDB容器的测试,如下所示:
@MicronautTest
class JwtAuthenticationSpec extends Specification {
final MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse("mongo:6.0.3"))
.withExposedPorts(27017)
def setup() {
mongoDBContainer.start()
embeddedServer = ApplicationContext.run(EmbeddedServer,
['mongodb.uri': "${mongoDBContainer.connectionString}/fire"]) //sets the uri to the test containers one
}
//...
我在application.yml中的MongoDB配置如下所示:
mongodb:
uri: ${MONGO_PROD_URI}
我担心未来的开发人员会创建一个新的测试,使用一个没有嵌入式服务器的新客户端,这将意味着测试将使用生产url对吗?我如何避免这种情况,以确保测试将永远不会使用生产url?
1条答案
按热度按时间qxsslcnc1#
查看MongoDB的Micronaut测试资源。
请参阅使用Micronaut数据访问MongoDB数据库指南MongoDB演示如何使用MongoDB和Micronaut测试资源以及如何在生产环境中运行:
当应用程序在本地启动时--无论是在测试中还是通过运行应用程序--都会检测到属性mongodb.uri的解析,并且Test Resources服务将启动一个本地MongoDB docker容器,并注入将其用作数据源所需的属性。
在生产环境下运行时,应该通过环境变量将此属性替换为生产MongoDB示例的位置。
MONGODB_URI=mongodb://username:password@production-server:27017/databaseName
更多信息
测试资源文档中关于MongoDB的部分比较少,在介绍部分:
测试资源仅在开发(例如,运行Gradle
run
任务或Mavenmn:run
目标时)和测试执行期间可用:产品代码将要求资源可用。简单地说,Micronaut测试资源为您处理旋转测试容器。
测试资源不会阻止开发人员将产品URI设置为环境变量或属性文件。
你可以这样做:
这将在测试环境中忽略
mongodb.uri
属性,并且您的测试用例不需要启动容器。也可以在上面的工厂中为映像名称("mongo:6.0.3"
)添加属性。