0

WordSpec の一部としていくつかのテストがあります。Scaltest のドキュメントを読んだところ、これで一連のテストが作成されるはずです。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 { ... }
  }

}

その結果、beforeAll にロードされたテスト データがテスト 2 に存在しません。これを機能させるには、各テストの DB を初期化します (「beforeAll」ではなく「before」を使用)。これは、このような小さなテストでは問題になりませんが、後で問題になる可能性があります。これをMavenで実行しています(IDE内から実行すると問題が発生します)

また、「mvn test」を実行すると、すべてのテストに対して単一の HSQLDB インスタンスが作成されるように見えることにも気付きました (つまり、上記の例は成功します)。上記のテストを「mvn test -Dtest=UserAgentTest」として実行すると、失敗します (複数の HSQLDB インスタンスが作成されているように見えます)。

残念ながら、"mvn test" で実行すると、すべてのテスト スイートで単一の HSQLDB インスタンスが使用されるため、他のいくつかのテストが失敗します。

私の質問は、テスト スイートごとに HSQLDB の 1 つの (そして 1 つのみの) インスタンスを作成するためのテスト セットアップを取得するにはどうすればよいかということです。

4

1 に答える 1