0

クラスで2つのspockテストがあります。両方のテストのセットアップは同じです。

Class MySpec {

  def "Test1"() {
    setup:
      def book = new Book(title: 'Something')
      book.id = 1
      book.save(flush: true, failOnError: true)
    // rest of the test
  }

  def "Test2"() {
    setup:
      def book = new Book(title: 'Something')
      book.id = 1
      book.save(flush: true, failOnError: true)
    // rest of the test
  }

}

注:Bookドメインには があるassigned idため、保存時に明示的に設定する必要があります。

最初のテストは機能しますが、次のテストは で失敗しorg.springframework.dao.DuplicateKeyExceptionます。テスト間でデータベースがロールバックされると思いました (このエラーは発生しないはずです)。ここで何が間違っていますか?

4

1 に答える 1

0

私のおすすめ:

static transactional = falseこのクラスに追加します。その理由は、トランザクションで実行されるサービスと同様に、統合テストも同様だからです。したがって、すでにトランザクションが実行されているため、サービスのメソッドにバインドされたトランザクションはありません (おそらくテストで呼び出します)。したがって、ロールバックは発生しません。 非トランザクションにするテストには、適切なtearDownコードを追加する必要があります。

別の解決策:

このクラスを単体テストとして作成するだけです。ロールバックは正常に機能します。

于 2013-09-16T07:21:18.757 に答える