【发布时间】:2020-07-18 01:57:01
【问题描述】:
我正在使用 h2 数据库来测试我的 postgres 流畅功能。
我在下面创建了一个 h2DbComponent:
trait H2DBComponent extends DbComponent {
val driver = slick.jdbc.H2Profile
import driver.api._
val h2Url = "jdbc:h2:mem:test;MODE=PostgreSQL;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;INIT=runscript from './test/resources/schema.sql'\\;runscript from './test/resources/schemadata.sql'"
val logger = LoggerFactory.getLogger(this.getClass)
val db: Database = {
logger.info("Creating test connection ..................................")
Database.forURL(url = h2Url, driver = "org.h2.Driver")
}
}
在上面的 sn-p 中,我使用 schema.sql 创建表并使用 schemadata.sql 插入单行(记录)。
然后我尝试使用我的测试用例将记录插入到下表中:
class RequestRepoTest extends FunSuite with RequestRepo with H2DBComponent {
test("Add new Request") {
val response = insertRequest(Request("XYZ","tk", "DM", "RUNNING", "0.1", "l1", "file1",
Timestamp.valueOf("2016-06-22 19:10:25"), Some(Timestamp.valueOf("2016-06-22 19:10:25")), Some("scienceType")))
val actualResult=Await.result(response,10 seconds)
assert(actualResult===1)
val response2 = getAllRequest()
assert(Await.result(response2, 5 seconds).size === 2)
}
}
上面的插入断言可以正常工作,说明记录已插入。但是 getAllRequest() 断言失败,因为输出仍然包含单行(由 schemadata.sql 插入)=> 这意味着 insertRequest 更改没有持久化。然而,下面的语句声明记录被插入,因为插入返回 1 表示插入了一条记录。
val response = insertRequest(Request("CMP_XYZ","tesco_uk", "DM", "RUNNING", "0.1", "l1", "file1",
Timestamp.valueOf("2016-06-22 19:10:25"), Some(Timestamp.valueOf("2016-06-22 19:10:25")),
Some("scienceType")))
val actualResult=Await.result(response,10 seconds)
下面是我对 insertRequest 的定义:
def insertRequest(request: Request):Future[Int]= {
db.run { requestTableQuery += request }
}
我无法弄清楚如何查看插入的记录。我需要添加任何属性/配置吗?
【问题讨论】:
-
您可以查看Acolyte 来对基于 JDBC 的代码进行单元测试(我是其中的贡献者)
标签: postgresql scala playframework h2 slick