gpt4 book ai didi

grails - 测试应用期间服务中服务注入(inject)的 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 14:45:16 25 4
gpt4 key购买 nike

最近遇到了一个奇怪的场景,服务中的服务的依赖注入(inject),在运行 test-app 时抛出 NPE

service-in-service 注入(inject)的原因是使 GORM/criteriaBuilder 尽可能 DRY。以下是我的两项服务。

实现了以下类 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()
}
}

现在,上述代码在运行应用程序模式下运行良好。
但是对于为 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
...
}
}

最佳答案

哇 !通过这种解决方法摆脱了这个愚蠢的错误。

对于 TestClass,将 searchService1 注入(inject)到 searchService2 对象中,如下所示:

def searchService2
def searchService2.searchService1 = new SearchService1()

但是来吧!这是正确的方法吗?谁能顺便解释一下上述错误,为什么在运行测试应用程序时没有实例化服务中服务。

关于grails - 测试应用期间服务中服务注入(inject)的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13157001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com