当前位置: 首页 > 知识库问答 >
问题:

我可以在JDBC URL模式下使用带有自定义Dockerfile的测试容器吗?

慕宜民
2023-03-14

我正在测试一个Spring Boot应用程序,并尝试使用Testcontainers在Docker容器中启动一个临时数据库,用于JUnit 5测试。有两种方法可以告诉Testcontainers启动并连接到测试数据库容器:

>

  • 通过在测试类中定义容器,添加至少几个注释,并且(在Spring Boot测试中)用几行代码覆盖应用程序上下文,将其指向新数据库。对于每个测试类来说,这是相当多的代码行。

    通过设置Spring。数据源。url属性设置为经过特殊修改的url。最优雅的方法,尽管可以说是一个缺点,是这使得测试对正在发生的事情不那么明确。

    我想使用选项2,但限制(我认为)是它要求您使用PostgreSQL(或任何数据库)的标准(空)“库”映像。我有一个自定义的数据库映像,有自己的Dockerfile。特别是这个映像包含许多初始化脚本(而不仅仅是一个)来构建数据库模式。

    有没有办法将Testcontainers的JDBC URL配置用于自定义Postgres映像?我更喜欢将其指向Docker文件,让Testcontainers动态生成映像,但我也可以接受一种解决方案,即预先构建数据库映像,并告诉Testcontainers从Docker Hub中提取它。

    作为参考,我的代码在Github上的joeclark phd/granite上,这里的Dockerfile位于“数据库”目录中。一个示例测试用例是AgencyControllerIntegrationTest。java,你可以看到,如果我使用JDBC URL方法,至少有15行代码可以被删除。

  • 共有1个答案

    田昊天
    2023-03-14

    你的问题有不同的解决方案。我认为一个很好的解决方案是设置一个应用程序。属性文件如下:

    spring.datasource.url = ${DB_HOST}:${DB_PORT}/"nameofDB"
    spring.datasource.username = ${DB_USERNAME}
    spring.datasource.password = ${DB_PASSWORD}
    

    您现在应该能够简单地定义容器中的变量。

    docker run \
        -it my_project_name \
        -e DB_HOST=myGraniteDB \
        -e DB_PORT=5432 \
        -e DB_USERNAME=${TEST_DB_USERNAME} \
        -e DB_USERNAME=${TEST_DB_PASSWORD} \
        ${granite_image_name}:${the_tag}
    

    在另一种情况下,您可以简单地启动docker容器,如下所示:

    docker run \
        -it my_project_name \
        ${granite_image_name}:${the_tag} \
        --spring.datasource.url=$test_db_url
    

    甚至定义一组外部化配置:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

     类似资料:
    • null 数据集:[(0,A),(0,B),(0,C),(1,D),(2,E)] 并行运算符实例数:2 GROUP by FUNCTION:返回对的第一个元素 分区函数:键0返回0,键1和2返回1。优点:处理可能将密钥0和1发送到同一个操作员实例的数据偏斜,这意味着一个操作员实例将接收80%的数据集。

    • 我有一个Spring boot应用程序,我使用spring-Cloud-stream从一个kafka主题中消费,进行一些处理并发布到另一个kafka主题。该应用程序运行良好,我已经编写了运行良好的单元测试(使用TestBinder)。 我现在正试图用嵌入式Kafka编写一个集成测试,并测试端到端的功能。我在这里跟踪了样本https://github.com/spring-cloud/spring-

    • 我有一个自定义任务定义来运行每个测试具有特殊设置的特定测试文件。我的任务定义如下: 现在,此设置中的一些测试是不可靠的,我尝试再次运行它们,如下所示: 我编写了一个测试类,第一次总是失败,第二次总是成功: 不幸的是,测试只执行一次,整个测试套件失败。我可以使用中所述的自定义规则成功运行测试https://stackoverflow.com/a/55178053/6059889 有没有办法将测试重试

    • 假设我有一个Person模型(Java类和数据库表),它有列/字段,如姓名,年龄,性别,身高,体重。 现在有2种可能 1) 我需要整列数据。。因此,我将命名查询为; @NamedQuery(name=“Person.findAll”,query=“从Person WHERE中选择p…” 2)我只需要特定的列数据...所以我将命名查询为; @NamedQuery(name=“Person.findS

    • 本文向大家介绍我可以在SAP HANA中使用“自定义错误”页面吗?,包括了我可以在SAP HANA中使用“自定义错误”页面吗?的使用技巧和注意事项,需要的朋友参考一下 您是正确的,因为XSA支持自定义错误页面,但传统版不支持自定义错误消息。 如果您需要采取任何方式,那么可以尝试的是,您需要通过负载平衡器或代理解析所有请求,然后显示自定义错误消息。这不是一种简单且可维护的方法。

    • 我尝试用自定义控制器制作一个自定义组件。自定义组件已经显示在应用程序上,但我未能向其添加属性。 项目结构: null 布尔马尔科 完全错误: 原因:java.lang.nullPointerException:无法调用“javafx.scene.image.imageeview.setimage(javafx.scene.image.image)”,因为“controller.topbarbtn.