最近、奇妙なシナリオに遭遇しました。サービス内のサービスへの依存性注入が、 test-appの実行中にNPEをスローしました。
サービスインサービスインジェクションの理由は、GORM/criteriaBuilderを可能な限りドライにすることです。以下は私の2つのサービスです。
次のクラスSearchService1.groovyは、検索機能を提供するために実装されています。
class SearchService1{
def search = { ...//Calls to local closures to build a dynamic criteria }
...
}
クラスSearchService2.groovyは、SearchService1クラスの検索クロージャーを使用します
class SearchService2{
def searchService1
...
def searchEntity(){
searchService1.search()
}
}
さて、上記のコードはrun-appモードでかなりうまく機能します。しかし、SearchService2用に作成された統合テストの場合、次のようにNPEがスローされます。
Cannot invoke method searchEntity() on null object
java.lang.NullPointerException: Cannot invoke method search() on null object
at com.myapp.service.SearchService2.searchEntity(SearchService2.groovy:326)
at com.myapp.service.SearchService2$searchEntity$0.callCurrent(Unknown Source)
at com.myapp.service.SearchService2.searchEntity(SearchService2.groovy:295)
at com.myapp.service.SearchService2$searchEntity.call(Unknown Source)
at com.myapp.integration.SearchService2Tests.testWhenSearch(SearchService2Tests.groovy:125)
ここで非常に基本的なものが欠けていますか?どんな考えでも大歓迎です。多くのThnx:)
TestClassからのスニペット:
class SearchService2Tests extends GroovyTestCase{
...
def searchService2
...
void testWhenSearch(){
def resultSet = searchService2.searchEntity() //This is the line throwing NPE
...
}
}