我只是想为访问MySQL数据库的服务添加测试用例,我想重新创建整个模式(对于某些场景,也只是使用带有每个测试用例所需数据的MySQL转储文件).我环顾四周,发现有些人使用SQLite/H2和其他人来做这件事,但我只是在游荡,如果有任何办法在内存中运行MySQL,所以我不需要担心MySQL的任何特定内容方言我可能正在使用我们的服务.
And*_*eim 34
使用与MySQL完全兼容且可在JUnit测试用例中使用的内存数据库的最简单方法是imho MariaDB4j.你只需要一个Gradle(/ Maven)依赖项(http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22mariaDB4j%22)和几行代码来启动:
DB database = DB.newEmbeddedDB(3306);
database.start();
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "");
Run Code Online (Sandbox Code Playgroud)
可以包含启动脚本
database.source("path/to/resource.sql");
Run Code Online (Sandbox Code Playgroud)
有关GitHub自述文件的更多信息:https: //github.com/vorburger/MariaDB4j
编辑:我有一个补充一些提示:MariaDB4j似乎在系统临时文件夹中添加文件.所以它将以嵌入的方式工作,这意味着不需要安装任何东西,你可以通过你想要的构建工具使用依赖.但它不是真正的仅内存解决方案,因此我们不能再谈论单元测试,因为单元测试不能依赖于文件或数据库
joe*_*son 19
我们使用MySQL和flyway来处理迁移.
对于单元测试和简单集成测试,我们在内存数据库中使用H2和MODE = MySQL参数.Mode = MySQL使H2 db能够处理大部分MySQL方言.
我们在Spring配置中的测试数据源设置如下:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="org.h2.Driver"/>
<property name="url" value="jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE" />
</bean>
Run Code Online (Sandbox Code Playgroud)
(如果您不知道Spring - XML转换为调用新的BasicDataSource,然后在创建的实例上调用setDriverClassName和setUrl)
然后我们在数据源上使用flyway创建模式,并像对待常规MySQL数据库一样读入:
<bean id="flyway" class="com.googlecode.flyway.core.Flyway" init-method="migrate">
<property name="dataSource" ref="dataSource" />
<property name="cleanOnValidationError" value="false" />
<property name="initOnMigrate" value="true" />
<property name="sqlMigrationSuffix" value=".ddl" />
</bean>
Run Code Online (Sandbox Code Playgroud)
您也可以在jdbcTemplate中使用dataSource bean并以这种方式运行一些SQL脚本或使用该MODE=MySQL标记运行许多MySQL脚本.
这就是为什么使用专有 SQL 扩展通常不是一个好主意的原因之一。
我要做的就是尝试确定使用非标准 SQL 的位置,并重构代码以将这些部分移至专用服务。然后您可以在运行单元测试时模拟这些。
| 归档时间: |
|
| 查看次数: |
28907 次 |
| 最近记录: |