作为 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 实例。