我使用SQL的行家-插件設置一個在存儲器HSQL數據庫單元測試HSQL單元測試行家
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sql-maven-plugin</artifactId>
<version>1.5</version>
<dependencies>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.2.8</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>create-db</id>
<phase>process-test-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<driver>org.hsqldb.jdbcDriver</driver>
<url>jdbc:hsqldb:mem:test;shutdown=false</url>
<username>SA</username>
<password></password>
<autocommit>true</autocommit>
<srcFiles>
<srcFile>src/test/sql/test_db/test.sql</srcFile>
</srcFiles>
</configuration>
</execution>
</executions>
</plugin>
在於,在行家運行單元測試:測試階段,我實例化與該數據源url
org.hsqldb.jdbc.JDBCDataSource ds = new JDBCDataSource();
ds.setUrl(URL);
ds.setUser("sa");
ds.setPassword("");
但這並沒有我通過腳本初始化的表。事實證明,surefire會派生出一個新的jvm,並且不能從那裏訪問啓動的原始hsql實例。有沒有一個解決方案沒有引入文件支持hsqldb?
感謝
謝謝,您的建議,但我需要的是那種SQL有效性檢查。我有很多動態構建的sqls(大量的StringBuilder.appends),並希望通過針對數據庫運行來檢查生成的sqls的有效性。我認爲dbunit會減輕表/結果集的比較,但是在這種情況下它會有幫助嗎? – mzzzzb
對於StringBuilder.appends非常非常小心,您可以引入SQL注入選項(https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet)。 DBUnit通常用於使數據庫處於特定狀態(預填表),因此您可以輕鬆地進行測試,就好像您正在使用生產數據庫一樣。 http://dbunit.sourceforge.net/howto.html –