サービスユニットテスト内でGrailsFixturesプラグインを使用しようとしています。私はgrails2.2を使用しています。
BuildConfig.groovyに次のコードがあります
plugins {
compile ":fixtures:1.2"
compile ":build-test-data:2.0.3"
...
..
.
}
最初に試しました
@TestFor(HotelService)
@Mock([Place])
class HotelServiceTests {
def fixtureLoader
void testFixturesInUnitTests() {
def fixture = fixtureLoader.build {
hotel(Place, name: "Hotel Hilton")
}
}
}
上記のテストは失敗しました:
| java.lang.NullPointerException: Cannot invoke method build() on null object
Google検索で、Grailsユーザーメーリングリストで、fixtureLoaderが単体テスト内で明示的に作成する必要があることがわかりました。
import grails.plugin.fixtures.*
@TestFor(HotelService)
@Mock([Place])
class HotelServiceTests {
def fixtureLoader
def grailsApplication
@Before
void setUp() {
fixtureLoader = new FixtureLoader(grailsApplication)
}
void testFixturesInUnitTests() {
def fixture = fixtureLoader.build {
hotel(Place, name: "Hotel Hilton")
}
}
}
テストは次のエラーで失敗しました:
java.lang.NullPointerException: Cannot invoke method hasGrailsPlugin() on null object
at grails.plugin.fixtures.builder.FixtureBuilder.lookForBuildTestDataPlugin(FixtureBuilder.groovy:53)
at grails.plugin.fixtures.builder.FixtureBuilder.<init>(FixtureBuilder.groovy:49)
at grails.plugin.fixtures.Fixture.createBuilder(Fixture.groovy:75)
at grails.plugin.fixtures.Fixture.build(Fixture.groovy:44)
at grails.plugin.fixtures.FixtureLoader.build(FixtureLoader.groovy:46)
別のGoogleSearchと私は、前のエラーを回避するための「ハック」を見つけました。
import grails.plugin.fixtures.*
import org.codehaus.groovy.grails.plugins.GrailsPluginManager
import org.codehaus.groovy.grails.plugins.PluginManagerHolder
@TestFor(HotelService)
@Mock([Place])
class HotelServiceTests {
def fixtureLoader
def grailsApplication
@Before
void setUp() {
fixtureLoader = new FixtureLoader(grailsApplication)
PluginManagerHolder.pluginManager = [hasGrailsPlugin: { String name -> true }] as GrailsPluginManager
}
void testFixturesInUnitTests() {
def fixture = fixtureLoader.build {
hotel(Place, name: "Hotel Hilton")
}
}
}
今、私は次のエラーを受け取っています:
java.lang.NullPointerException: Cannot invoke method isDomainClass() on null object
at grails.plugin.fixtures.buildtestdata.BuildTestDataBeanDefinitionTranslator.translate(BuildTestDataBeanDefinitionTranslator.groovy:54)
at grails.plugin.fixtures.buildtestdata.BuildTestDataBeanDefinitionTranslator.translate(BuildTestDataBeanDefinitionTranslator.groovy:43)
at grails.plugin.fixtures.builder.FixtureBuilder.translateToBuild(FixtureBuilder.groovy:126)
at grails.plugin.fixtures.builder.FixtureBuilder.invokeMethod(FixtureBuilder.groovy:121)
at com.softamo.movilrural.TopRuralScraperServiceTests$_testFixturesInUnitTests_closure2.doCall(TopRuralScraperServiceTests.groovy:26)
私はこれを解決する方法がわかりません。フィードバックは大歓迎です。