【发布时间】:2012-02-04 12:40:57
【问题描述】:
我有几个测试作为 WordSpec 的一部分。根据我对 Scalatest 文档的阅读,这应该创建一套测试。正在为此文件中的每个测试用例重新启动 HSQLDB。
@RunWith(classOf[JUnitRunner])
class UserAgentTest extends WordSpec with BeforeAndAfterAll {
val userService: UserService = new UserServiceJpaImpl
var userAgent: ActorRef = _
var user: MutableUser = _
override def beforeAll(configMap: Map[String, Any]) {
TestUtil.deleteAllTestUsers()
user = TestUtil.createTestUser("joe")
user.cash = 500
user.exp = 10000
user.level = 10
userService.save(user)
userAgent = actorOf(new UserAgent(user.id)).start()
}
override def afterAll(configMap: Map[String, Any]) {
if (userAgent != null)
userAgent.stop()
}
"UserAgent" must {
"test 1..." in { ... }
"test 2..." in { ... }
}
}
结果是,在测试 2 中加载的测试数据在 beforeAll 中不存在。我可以通过为每个测试初始化数据库来完成这项工作(使用“before”而不是“beforeAll”)。对于这样的小测试来说,这不是问题,但以后可能会成为问题。我正在使用 Maven 运行它(从我的 IDE 内部运行时会出现问题)
我还注意到,当我运行“mvn test”时,它似乎为我的所有测试创建了一个 HSQLDB 实例(这意味着我上面的示例将成功)。当我以“mvn test -Dtest=UserAgentTest”运行上述测试时,它会失败(它似乎创建了多个 HSQLDB 实例)。
不幸的是,使用“mvn test”运行会导致我的一些其他测试失败,因为我的所有测试套件都使用单个 HSQLDB 实例。
我的问题是,如何让我的测试设置为每个测试套件创建一个(并且只有一个)HSQLDB 实例。
【问题讨论】:
-
请编辑您的文字并明确说明您的问题是什么。