Grails-如何在集成测试中注入resources.groovy中定义的bean

Grails-如何在集成测试中注入resources.groovy中定义的bean,grails,integration-testing,Grails,Integration Testing,我在resources.groovy中定义了1个bean cachedbean(serviceImpl) { } 在服务中,我是这样使用它的 MyService{ static transactional = false def cachedbean myMeth(){ cachedbean.get("cacheKey") } } 这很好,但当我尝试使用集成测试对其进行测试时,在“get”上会出现nu

我在resources.groovy中定义了1个bean

cachedbean(serviceImpl) {
  }
在服务中,我是这样使用它的

    MyService{

      static transactional = false
      def cachedbean

        myMeth(){
         cachedbean.get("cacheKey")
      }
   }
这很好,但当我尝试使用集成测试对其进行测试时,在“get”上会出现null指针异常 cachedbean.getcacheKey

它是如何工作的

不清楚是否基于示例代码,但您需要在resources.groovy中完全限定serviceImpl的包和类名,除非您显式导入包

您可能需要在resources.groovy中的声明范围内添加行bean.autowire=byName


如果让Grails自动将服务bean连接到集成测试类中,那么它应该是自动连接的,而不是重新连接服务实例

class MyServiceTests extends GroovyTestCase {
    def myService
    void testSomething () {
        // myService should already be wired up
    }
}

1我为serviceImpl添加了完全限定名。2它在代码中工作,但仅在集成测试中失败。那么,显式添加它会产生影响吗?添加bean.autowire=byName不会对任何事情产生负面影响,不会。不过,我有一个想法:您是二手引用此服务吗?也就是说,您的测试是针对另一个调用此服务的服务的吗?如果是这样的话,spring还不够聪明,不知道如何注入这个服务,您可能需要您的测试来手动为cachedBean分配一个值。我直接调用此服务方法。您如何在测试中获得对MyService的引用?完全限定resourcs.groovy中的类名肯定不是问题,因为OP声明连接在运行的应用程序中工作,Grails默认使用autowire,因此没有理由在此处再次指定,布线在running应用程序中工作。