首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试的简单灵活设置

单元测试的简单灵活设置
EN

Stack Overflow用户
提问于 2016-05-02 17:08:08
回答 3查看 3.2K关注 0票数 1

我使用play-slick进行平滑集成,使用Guice注入DAO。用于创建表和填充种子数据(即1.sql, 2.sql, ... )的演进。我几乎完成了,我想将我的演进文件和application.conf拆分为两个环境。

我创建了两组指向不同数据库的conf/application.conftest/conf/application.test.conf,用于测试和实时部署。我已经将build.sbt设置为将application.test.conf用于test

代码语言:javascript
复制
javaOptions in Test += "-Dconfig.file=test/conf/application.test.conf"

application.test.conf内容,

代码语言:javascript
复制
slick.dbs.h2test.driver = "slick.driver.H2Driver$"
slick.dbs.h2test.db.driver = org.h2.Driver
slick.dbs.h2test.db.url = "jdbc:test.h2:mem:play;MODE=MYSQL;DB_CLOSE_DELAY=-1"

如何配置我的测试用例/套件以使用h2test上下文(即,conf/evolutions/h2test/1.sql)而不是default来填充测试数据并再次运行快速查询h2test?我尝试使用FakeApplicationGuiceApplicationBuilder方式,但收效甚微。谢谢

EN

回答 3

Stack Overflow用户

发布于 2016-05-03 02:58:47

我看到我的play-slick example

代码语言:javascript
复制
  class EmployeeRepositorySpec extends PlaySpecification{

     import models._

     "Employee repository" should {

       def empRepo(implicit app: Application) = Application.instanceCache[EmployeeRepository].apply(app)

    "get all rows" in new WithApplication()  {
      val result = await(empRepo.getAll)
      result.length === 4
      result.head.name === "sky"
     }

  "get single rows" in new  WithApplication()  {
      val result = await(empRepo.getById(1))
    result.isDefined === true
      result.get.name === "Vikas"
  }

   "insert a row" in new  WithApplication()  {
    val knolId = await(empRepo.insert(Employee("sky", "sky@knoldus.com",  "knoldus","Senior Consultant")))
     knolId === 5
    }

   "insert multiple rows" in new  WithApplication()  {
     val result = empRepo.insertAll(List(Employee("sky1", "sky1@knoldus.com", "knoldus","Senior Consultant"),
    Employee("sky2", "sky2@knoldus.com", "knoldus","Senior Consultant")))
      val knolIds = await(result)
     knolIds === Seq(5, 6)
    }

    "update a row" in new  WithApplication()  {
      val result = await(empRepo.update(Employee("sky", "sky@knoldus.com",  "knoldus","Senior Consultant", Some(1))))
      result === 1
     }

     "delete a row" in new  WithApplication()  {
       val result = await(empRepo.delete(1))
       result === 1
     }
    }

   def await[T](v: Future[T]): T = Await.result(v, Duration.Inf)

 }
票数 5
EN

Stack Overflow用户

发布于 2016-05-04 14:15:51

我添加了play.slick.db.default = test来覆盖application.test.conf中的默认。最重要的是,我补充说

代码语言:javascript
复制
play.evolutions.db.default.autoApply = false
slick.dbs.default.driver = "slick.driver.H2Driver$"
slick.dbs.default.db.driver = "org.h2.Driver"
slick.dbs.default.db.url = "jdbc:h2:mem:nothing"

否则,database还将填充由"default“定义的另一个数据库,而我的”其他数据库“没有运行,这会导致我的测试失败,因为连接到一个不存在的数据库失败。

票数 1
EN

Stack Overflow用户

发布于 2017-08-14 15:32:27

您可以创建一个为所有存储库编写测试用例的通用类,如下所示:

代码语言:javascript
复制
 class TestModel[T: ClassTag] extends WithApplicationLoader {
  lazy val app2dao = Application.instanceCache[T]

  lazy val repository: T = app2dao(app)

  def result[R](response: Future[R]): R =
    Await.result(response, 2.seconds)
}

现在,在TestModel中传递测试类,从测试用例中创建一个对象,如下所示:

代码语言:javascript
复制
class TestRepositoryTest extends Specification {

  private val modelTest = new ModelsTest[TestRepository]

  "Test Repository" should {

    "store a user" in {
      val testObj = Test(0, "test@example.com", new DateTime(System.currentTimeMillis))

      val storeResult =
        modelTest.result(modelTest.repository.store(testObj))

      storeResult must equalTo(1)
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36978794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档