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

如何在JUnit测试容器中导入MySQLContainer中的sql转储文件

锺离正祥
2023-03-14

我有一个Mysql测试容器,我需要在容器启动后导入转储文件。我尝试了下面两个选项。

public class AbstractTest {

    public static MySQLContainer<?> mySQLContainer = new MySQLContainer<>("mysql:5.7");

    static {
        mySQLContainer
            .withDatabaseName("myDatabase")
            .withCopyFileToContainer(
                MountableFile.forClasspathResource("init.sql", 0744),
                "init.sql")
            .withUsername("root")
            .withPassword("root")
            .start();
    }

    @PostConstruct
    @SneakyThrows
    public void init() {
       option 1 // mySQLContainer.execInContainer("mysql -u root -proot myDatabase < init.sql");
       option 2 // mySQLContainer.execInContainer("mysql", "-u", "root", "-proot", "myDatabase", "<", "init.sql");
    }
   ////
}
mysql  Ver 14.14 Distrib 5.7.35, for Linux (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --auto-rehash       Enable automatic rehashing. One doesn't need to use
                      'rehash' to get table and field completion, but startup
////.....
  option 2 // mySQLContainer.execInContainer("mysql", "-u", "root", "-proot");

mysql-u root-proot mydatabase 命令可以正常工作,如果我只是通过bash从CLI连接到容器。

那么我的问题是--如何通过执行Image中的命令在JUnit测试容器中的MySQLContainer中导入SQL转储文件?


共有1个答案

缑永年
2023-03-14

您需要一个适用于MySql的应用程序。属性,类似于:

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/db_example
spring.datasource.username=springuser
spring.datasource.password=ThePassword
spring.datasource.driver-class-name =com.mysql.jdbc.Driver
#spring.jpa.show-sql: true

然后,您可以在/src/test/资源中添加一个data.sql,它将自动运行。

 类似资料:
  • 在使用JUnit进行测试时,我无法理解一些事情,我编写了一些测试,而有些测试似乎可以简单地使用 而且 有些似乎不能与它们一起工作,所以我必须使用 而且 我理解@mockbean是在处理spring容器时使用的,而@mock只是用来复制/模拟某个类及其方法。但是什么时候才是使用@mockbean的最佳时机呢? 上面是我在spring boot应用程序中为一个控制器编写的测试,但当我使用@mock模拟

  • 问题内容: 我想要一个npm脚本来创建/配置/等。最后导入一个SQL转储。整个创建,配置等都可以正常工作,但是,我无法使导入正常工作。永远不会插入数据。这就是我所拥有的(不要嵌套嵌套的回调,因为它们会变成promise): 我还尝试了Sequelize(ORM)进行以下操作: 问题答案: 这是我使用迁移框架设置初始Sequelized导入的方法。这里有很多事情要做,但总之我: 在migration

  • 我正在学习JUnit测试。我想在JUnit中测试getter和setter,但它不起作用。这是第一节课。 我需要如何更改以测试setter?我如何测试它?

  • 我已经在Scala中创建了一个blazegraph RDF4J存储库和连接: 我可以添加语句、检索SPARQL结果等。 现在我想将存储库的内容转储到一个RDF文件中,如下所示: 但是,如果我试图用或替换预期的模型参数,Eclipse会抱怨: 重载方法值write with备选项:(X$1:Iterable[org.openrdf.model.statement],X$2:java.io.write

  • 问题内容: 我想用JUnit测试来验证Java中集合的排序算法。如果我在集合中输入“ B”,“ C”,“ A”并希望对其进行排序(例如,按字母顺序排列),那么使用JUnit进行测试的正确方法是什么? 我实现了Comparable接口,并希望确保排序工作正常。 我想这个问题可以从Java或JUnit扩展到任何语言的常规测试。 问题答案: 我将按 预期的 顺序创建另一个具有值的集合,然后仅检查结果是否

  • 我有一个用PHP/Symfony构建的api,在Docker容器中。我想测试一下。 为此: > 第二:我运行测试:vendor/bin/simple phpunit 在我的测试中,我有以下要求: 如您所见,我请求endpoint"10.110.167.124:8080/api/v1....."。它起作用了,但我知道我不能再这样下去了。 我试着用“localhost”、“localhost:8080