之前的一张海报将 Liquibase 列为一个选项,但是他们没有提到 Liquibase 定义在特定上下文中运行的规则的能力(Liquibase中的上下文)。这允许您将架构更新不标记为任何特定上下文,并将单元测试的固定装置标记为test
. 这样,只有在您运行单元测试时才会插入固定装置。
以下是包含架构和固定装置的 Liquibase 更改集示例:
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog/1.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog/1.9 http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-1.9.xsd">
<changeSet author="avalade" id="1">
<createTable tableName="users">
<column autoIncrement="true" name="id" type="long">
<constraints nullable="false" primaryKey="true" />
</column>
<column name="email" type="varchar(255)" />
</createTable>
</changeSet>
<changeSet author="avalade" id="2" context="test">
<insert tableName="user">
<column name="id" value="1" />
<column name="email" value="test@test.com" />
</insert>
</changeSet>
</databaseChangeLog>
然后,如果您使用 Spring 来管理您的 DAO,您可以将以下内容放入您正在部署的应用程序上下文文件中:
<bean id="liquibase" class="liquibase.spring.SpringLiquibase">
<property name="dataSource" ref="dataSource" />
<property name="changeLog" value="classpath:dbChangelog.xml" />
</bean>
对于您在单元测试中使用的应用程序上下文文件,请使用附加上下文属性配置 Liquibase:
<bean id="liquibase" class="liquibase.spring.SpringLiquibase">
<property name="dataSource" ref="dataSource" />
<property name="changeLog" value="classpath:dbChangelog.xml" />
<property name="contexts" value="test" />
</bean>
这样,您可以将所有数据库定义放在一个地方,并且仅在运行测试代码时插入您的固定装置。