gpt4 book ai didi

scala - 如何使用 ScalaTest 测试基于 Salat 的方法

转载 作者:IT老高 更新时间:2023-10-28 13:23:03 26 4
gpt4 key购买 nike

我正在使用 Play 2、Salat(用于 mongoDB 绑定(bind))编写一个网络应用程序。我想在类(class)模型中测试一些方法(例如测试我通过 id 检索正确类(class)的事实)。问题是我不想用虚拟类(class)污染我当前的数据库。如何使用 Salat 和 Scala Test 使用假数据库?这是我的测试文件之一。它创建了两个类(class),并将其插入数据库,并在其上运行一些测试。

LessonSpec extends FlatSpec with ShouldMatchers {
object FakeApp extends FakeApplication()

val newLesson1 = Lesson(
title = "lesson1",
level = 5,
explanations = "expl1",
questions = Seq.empty)
LessonDAO.insert(newLesson1)

val newLesson2 = Lesson(
title = "lesson2",
level = 5,
explanations = "expl2",
questions = Seq.empty)
LessonDAO.insert(newLesson2)

"Lesson Model" should "be retrieved by level" in {
running(FakeApp) {
assert(Lesson.findByLevel(5).size === 2)
}
}
it should "be of size 0 if no lesson of the level is found" in {
running(FakeApp) {
Lesson.findByLevel(4) should be(Nil)
}
}

it should "be retrieved by title" in {
running(FakeApp) {
Lesson.findOneByTitle("lesson1") should be(Some(Lesson("lesson1", 5, "expl1", List())))
}
}

}

我在网上搜索,但找不到使用 Salat 和 ScalaTest 的良好链接或项目。

最佳答案

Salat 开发人员在这里。我的建议是有一个单独的仅测试数据库。您可以使用测试数据填充它以使您的测试数据库处于已知状态 - 请参阅 casbah 测试以了解如何执行此操作 - 然后根据需要对其进行测试,并根据需要清除集合。

我使用的是 specs2,不是 scalatest,但原理是一样的 - 参见 Salat 测试的源代码。

这里有一个很好的测试可以帮助您入门: https://github.com/novus/salat/blob/master/salat-core/src/test/scala/com/novus/salat/test/dao/SalatDAOSpec.scala

请注意,在我的基本规范中,我清除了我的测试数据库 - 这会在每个规范之前运行:

trait SalatSpec extends Specification with Logging {

override def is =
Step {
// log.info("beforeSpec: registering BSON conversion helpers")
com.mongodb.casbah.commons.conversions.scala.RegisterConversionHelpers()
com.mongodb.casbah.commons.conversions.scala.RegisterJodaTimeConversionHelpers()

} ^
super.is ^
Step {
// log.info("afterSpec: dropping test MongoDB '%s'".format(SalatSpecDb))
MongoConnection().dropDatabase(SalatSpecDb)
}

然后在 SalatDAOSpec 中,我在创建、填充和/或清除单个集合的范围内运行测试,以便测试可以在预期状态下运行。一个问题:如果您在同一个集合上同时运行测试,它们可能会由于意外状态而失败。解决方案是在隔离的特殊用途集合中运行测试,或者强制测试按顺序运行,以便在不同的测试用例修改集合时,对单个集合的操作不会相互影响。

如果您发布到 Scalatest 邮件列表 (http://groups.google.com/group/scalatest-users),我相信有人可以推荐正确的设置方法。

关于scala - 如何使用 ScalaTest 测试基于 Salat 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12646037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com