作为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中加载的测试数据。我可以通过初始化每个测试的DB(使用“before”而不是“beforeAll”)来完成这项工作。这对于像这样的小测试来说不是问题,但稍后可能会出问题。我正在使用Maven运行它(它在我的IDE中运行时出现问题)
我还注意到,当我运行“mvn test”时,它似乎为我的所有测试创建了一个HSQLDB实例(意思是,我上面的例子将会成功)。当我以“mvn test -Dtest = UserAgentTest”运行上述测试时,它将失败(它似乎创建了多个HSQLDB实例)。
不幸的是,使用“mvn test”运行会导致我的其他一些测试失败,因为单个HSQLDB实例用于我的所有测试套件。
我的问题是,如何让我的测试设置为每个测试套件创建一个(且只有一个)HSQLDB实例。
答案 0 :(得分:0)
对于所有测试使用单个HSQLDB实例,如果某些测试套件需要以空数据库开头,则可以发出此语句以清除每个套件开头或结尾的旧数据,具体取决于设置: / p>
DROP SCHEMA PUBLIC CASCADE
这也可以用于测试创建的任何模式。
其他选项包括连接到包含内存数据库的服务器,该服务器允许数据库在不同进程中执行多次执行。