2017-02-28 83 views
0

我已经写了一些单元测试名为CountryRepository.java用Intellij或Maven为单元测试生成SQLite数据库?

这些单元测试配置为使用所产生的SQLite数据库文件中的测试资源文件夹,像这样一个Java库:

/** 
* This test relies on the test-seed.sql file located in /src/test/java/resources/db/country 
*/ 
public class SqliteCountryRepositoryTest { 

    private final static String DB_CONNECTION = "jdbc:sqlite::resource:db/country/test.db"; 

文件位置

enter image description here

因为我们不想犯DB文件与git,我必须手动基因评估test.db文件,以便单元测试工作。

例如

sqlite3 test.db 
> .read schema.sql 
> .read test-seed.sql 

如何配置Maven和/或的IntelliJ到每个I运行测试时生成此文件数据库,以便它可靠地工作?

我是否需要编写一个shell脚本并通过Maven调用它?

积分为我怎么可以做同样的主/资源/数据库文件

感谢

+0

您是否考虑使用[纯Java代码](http://www.sqlitetutorial.net/sqlite-java)在JUnit测试的'setUp'方法中创建数据库/创建数据库/)? – CrazyCoder

回答

1

我相信生成一个JUnit ClassRule,关于“beforeClass”创建DB和加载模式,并on“afterClass”删除这些文件将是最适合您的方法。这样文件就只为测试而创建,甚至可以在临时位置生成它们。 要以编程方式生成DB文件,这只是创建连接的一个问题。请参阅此处的链接以及一些示例代码: http://www.sqlitetutorial.net/sqlite-java/create-database/

+0

谢谢。如果它在资源路径上,这将在JAR中工作吗?我以为你不能写入JAR文件? – kaleeway

+0

您无法在JAR中写入新文件,但您始终可以使用默认临时位置来执行此操作,例如, File :: createTempFile(https://docs.oracle.com/javase/8/docs/api/java/io/File.html#createTempFile-java.lang.String-java.lang.String-) – Boschi

+0

谢谢,但是这个不是我需要的解决方案。我需要在运行时和JAR内部生成db文件:) – kaleeway