【发布时间】:2010-02-16 12:00:48
【问题描述】:
我正在测试我的应用程序的一项服务,该服务依赖于运行时的其他服务。测试时,依赖注入似乎不起作用。运行集成测试时,依赖注入是否适用于 Grails 工件?
【问题讨论】:
标签: grails integration-testing
我正在测试我的应用程序的一项服务,该服务依赖于运行时的其他服务。测试时,依赖注入似乎不起作用。运行集成测试时,依赖注入是否适用于 Grails 工件?
【问题讨论】:
标签: grails integration-testing
是的,当运行测试(即集成目录中的测试)时,应用程序会启动,并且所有 bean 都会像应用程序实际运行一样被创建和注入。测试应用和运行应用的唯一区别应该是配置环境。
当然,如果您在测试中使用“new”运算符实例化需要注入的类,您将无法获得 DI 的好处。相反,在您的测试用例中为您测试的 bean 创建一个属性,它将被注入:
class MyServiceTests extends GrailsUnitTestCase {
MyService service
void testInjection() {
assertNotNull service
}
}
【讨论】:
对于那些使用 Grails 1.3.7 的人,我发现不能使用类名来使依赖注入起作用。相反,将服务声明为:
def myService
然后 DI 魔法发生了。使用 1.3.7 中的上述代码,not null 断言将失败。
【讨论】:
def fooController = new FooController() - 然后依赖项将正确连接。