scala – 测试Play Slick app
发布时间:2020-12-16 18:55:29 所属栏目:安全 来源:网络整理
导读:我有一个简单的CRUD应用程序,使用 Scala Play 2.4.3和Play-slick 1.1.0(光滑的3.1.0)构建,它使用 MySQL数据库进行持久存储. 我试图为我的应用程序创建测试,我看到了两个主要选项: 模拟数据库访问,据我所见,需要进行一些代码更改 make tests使用替代数据库(
我有一个简单的CRUD应用程序,使用
Scala Play 2.4.3和Play-slick 1.1.0(光滑的3.1.0)构建,它使用
MySQL数据库进行持久存储.
我试图为我的应用程序创建测试,我看到了两个主要选项: >模拟数据库访问,据我所见,需要进行一些代码更改 什么是最好的方法(优势和消极)? 我更喜欢第二种方法,但我在设置测试时遇到了一些困难. 我需要做什么?首先,我认为我需要用FakeApplication进行测试,对吧?我是否需要任何sbt依赖才能做到这一点? 之后,如何指定使用H2数据库? 解决方法
我有同样的斗争,我想出了这样的解决方案(使用第二种方法):
为DAO创建一个上下文来使用: trait BaseContext{ def dbName: String val dbConfig = DatabaseConfigProvider.get[JdbcProfile](dbName) val db = dbConfig.db val profile = dbConfig.driver val tables = new Tables { // this is generated by Schema Code Generator override val profile: JdbcProfile = dbConfig.driver } } @Singleton class AppContext extends BaseContext{ def dbName = "mysql" // name in your conf right after "slick.dbs" } @Singleton class TestingContext extends BaseContext{ def dbName = "h2" } 然后创建一个模块来绑定注入,并且不要忘记使用play.modules.enabled =“your.Module”在conf中启用它: class ContextModule(environment: Environment,configuration: Configuration) extends AbstractModule { override def configure(): Unit = { if (configuration.getString("app.mode").contains("test")) { bind(classOf[BaseContext]) .to(classOf[TestingContext]) } else { bind(classOf[BaseContext]) .to(classOf[AppContext]) } } } 并将它注入您创建的每个DAO: class SomeDAO @Inject()(context: BaseContext){ val dbConfig = context.dbConfig val db = context.db val tables = context.tables import tables.profile.api._ def otherStuff.... // you can call db.run(...),tables.WhateverYourTableIs,tables.TableRowCaseClass,... } 最后一步,你的配置文件.在我的例子中,我使用app.mode来标记环境,并且我为不同的环境使用单独的.conf.原因是,在这些配置中,您必须具有正确的数据库配置.这是样本: app.mode = "test" # Database configuration slick.dbs = { # for unit test h2 { driver = "slick.driver.H2Driver$" db = { url = "jdbc:h2:mem:test;MODE=MYSQL" driver = "org.h2.Driver" keepAliveConnection = true } } } 我很确定我的解决方案不是一个优雅的解决方案,但它可以提供货物. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |