私は、独自のドメイン クラスを持つ Grails プラグインに取り組んでいます。名前付きデータ ソースの使用を開始するまで、統合テストは正常に機能していました。ここで、テストを実行すると、テストで を呼び出すたびにフィクスチャ データがデータベースに複製されますfixtureLoader.load()
。
これが私のドメインオブジェクト、フィクスチャなどの例です:
Program.groovy:
package mydomain
class Program {
String name
String code
static mapping = {
datasource 'myData'
}
String toString() {
"$name ($code)"
}
}
programData.groovy:
import mydomain.*
fixture {
currentProg1(Program, name:'Program Name', code:'44')
}
私のデータソースは次のように構成されています:
test {
dataSource_myData {
dbCreate = "create-drop"
url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
}
そして私のテストは次のようなものです:
package mydomain
import grails.plugin.spock.IntegrationSpec
class ProgramSpec extends IntegrationSpec {
def fixtureLoader
def "test current program list"() {
given:
def loader = fixtureLoader.load("programData")
when:
List results = Program.list()
then:
assert results.size() == 1
}
def "test toString"() {
given:
def loader = fixtureLoader.load("programData")
when:
def testCase = loader.currentProg1
then:
assert testCase.toString() == "Program Name (44)"
}
}
テストを実行すると、次のようになります。
Failure: test current program list(com.sg.contract.guide.ProgramSpec)
Condition not satisfied:
results.size() == 1
| | |
| 2 false
[Program Name (44), Program Name (44)]
2 番目のテストをコメントアウトすると、正常に動作します。ただし、両方のテストを実行すると、フィクスチャ データが DB に 2 回挿入されます。
dataSource_myData
データ ソースを変更して名前付きソースを削除し (に変更dataSource
)、ドメイン クラスのマッピングからデータソース構成を削除しても機能します。
名前付きデータソースを使用すると、フィクスチャ データが 2 回挿入されるか、各テスト後にクリーンアップされない理由がわかりません。何か案は?