play 2.6.3 在 运行 时检测来自 application.conf 的数据库,但在测试期间检测不到
play 2.6.3 detects database from application.conf when running but not during tests
我一直在使用 JUnit 测试来验证数据库是否与 UCanAccess 驱动程序一起正常工作时遇到问题。当我在 IntelliJ IDEA 中 运行 服务器正常时,我被告知数据库池设置正确:
[info] application - Creating Pool for datasource 'default'
[info] p.a.d.DefaultDBApi - Database [default] connected at jdbc:ucanaccess://c:/Users/me/Documents/testdb.accdb
但是,当我 运行 通过 IntelliJ 测试 JUnit 时,出现以下错误:
Configuration error: Configuration error[Driver not found: [org.h2.Driver}]]
at play.api.Configuration$.configError(Configuration.scala:155)
at play.api.Configuration.reportError(Configuration.scala:984)
at play.api.db.DefaultDatabase$$anonfun$driver.apply(Databases.scala:114)
at play.api.db.DefaultDatabase$$anonfun$driver.apply(Databases.scala:108)
...
我假设上述错误是由于 Play 默认使用默认数据库配置,即 h2 数据库引起的。
如何让 JUnit 测试识别我的数据库驱动程序而不是默认使用 h2 数据库?
测试:
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import play.db.Database;
import play.db.Databases;
import play.db.evolutions.Evolution;
import play.db.evolutions.Evolutions;
import java.sql.Connection;
import static org.junit.Assert.assertTrue;
public class ApplicationTest {
Database database;
@Before
public void setupDatabase() {
// Gets default database in this case
database = Databases.inMemory();
System.out.println(database.getConnection());
Evolutions.applyEvolutions(database, Evolutions.forDefault(new Evolution(
1,
"create table teste (id bigint not null, name varchar(255));",
"drop table test;"
)));
}
@After
public void shutdownDatabase() {
Evolutions.cleanupEvolutions(database);
database.shutdown();
}
@Test
public void databaseCRUD() throws Exception {
Connection conn = database.getConnection();
conn.prepareStatement("insert into test values (10, 'testing')").execute();
// Make sure that there is a tenth element in the table
assertTrue(
conn.prepareStatement("select * from test where id = 10 and name = 'testing'")
.executeQuery().next()
);
}
}
您可以使用您需要的驱动程序创建数据库。
这是一个 postgres 示例:
val dbUrl = sys.env.getOrElse("DATABASE_URL", "jdbc:postgresql://localhost:5432/app?user=user&password=password")
val database = Databases("org.postgresql.Driver", dbUrl, "testingzzz")
使用正确的 url 和驱动程序,一切顺利。
我一直在使用 JUnit 测试来验证数据库是否与 UCanAccess 驱动程序一起正常工作时遇到问题。当我在 IntelliJ IDEA 中 运行 服务器正常时,我被告知数据库池设置正确:
[info] application - Creating Pool for datasource 'default'
[info] p.a.d.DefaultDBApi - Database [default] connected at jdbc:ucanaccess://c:/Users/me/Documents/testdb.accdb
但是,当我 运行 通过 IntelliJ 测试 JUnit 时,出现以下错误:
Configuration error: Configuration error[Driver not found: [org.h2.Driver}]]
at play.api.Configuration$.configError(Configuration.scala:155)
at play.api.Configuration.reportError(Configuration.scala:984)
at play.api.db.DefaultDatabase$$anonfun$driver.apply(Databases.scala:114)
at play.api.db.DefaultDatabase$$anonfun$driver.apply(Databases.scala:108)
...
我假设上述错误是由于 Play 默认使用默认数据库配置,即 h2 数据库引起的。
如何让 JUnit 测试识别我的数据库驱动程序而不是默认使用 h2 数据库?
测试:
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import play.db.Database;
import play.db.Databases;
import play.db.evolutions.Evolution;
import play.db.evolutions.Evolutions;
import java.sql.Connection;
import static org.junit.Assert.assertTrue;
public class ApplicationTest {
Database database;
@Before
public void setupDatabase() {
// Gets default database in this case
database = Databases.inMemory();
System.out.println(database.getConnection());
Evolutions.applyEvolutions(database, Evolutions.forDefault(new Evolution(
1,
"create table teste (id bigint not null, name varchar(255));",
"drop table test;"
)));
}
@After
public void shutdownDatabase() {
Evolutions.cleanupEvolutions(database);
database.shutdown();
}
@Test
public void databaseCRUD() throws Exception {
Connection conn = database.getConnection();
conn.prepareStatement("insert into test values (10, 'testing')").execute();
// Make sure that there is a tenth element in the table
assertTrue(
conn.prepareStatement("select * from test where id = 10 and name = 'testing'")
.executeQuery().next()
);
}
}
您可以使用您需要的驱动程序创建数据库。 这是一个 postgres 示例:
val dbUrl = sys.env.getOrElse("DATABASE_URL", "jdbc:postgresql://localhost:5432/app?user=user&password=password")
val database = Databases("org.postgresql.Driver", dbUrl, "testingzzz")
使用正确的 url 和驱动程序,一切顺利。