我正在测试我的应用程序的服务,它依赖于运行时的其他服务。在测试时,依赖注入似乎不起作用。在运行集成测试时,依赖注入是否适用于Grails伪像?
答案 0 :(得分:8)
是的,在运行测试时(即集成目录中的那些测试),应用程序启动并创建并注入所有bean,就像应用程序实际运行一样。测试应用程序和正在运行的应用程序之间的唯一区别应该是配置环境。
当然,如果您在测试中使用“new”运算符实例化需要注入的类,您将无法获得DI的好处。相反,在测试用例中为您的测试创建一个属性,它将被注入:
class MyServiceTests extends GrailsUnitTestCase {
MyService service
void testInjection() {
assertNotNull service
}
}
答案 1 :(得分:4)
对于那些使用Grails 1.3.7的人,我发现你不能使用类名来使依赖注入工作。相反,将服务声明为:
def myService
然后DI魔术发生了。使用1.3.7中的上述代码,非空断言将失败。