Grails集成测试与多种服务

时间:2012-06-13 14:07:22

标签: unit-testing grails integration-testing grails-2.0

测试依赖于其他服务的Grails服务的最佳做法是什么? 默认的mixin TestFor正确地注入了测试中的服务,例如:

@TestFor(TopService) 
class TopServiceTests {
    @Test
    void testMethod() {
        service.method()
    }
}

但是如果我的TopService(服务)实例依赖于另一个服务,比如InnerService:

class TopService {
    def innerService
}

innerService将不可用,依赖注入似乎不会填充此变量。我该怎么办?

2 个答案:

答案 0 :(得分:8)

集成测试不应使用@TestFor注释,它们应extend GroovyTestCase。测试注释仅用于单元测试(并且在集成测试中使用时会有不良行为,尤其是@Mock注释)。你现在正在看到其中一种不良行为。

如果您延长GroovyTestCase,那么您可以

def topService

在测试的顶部,它会注入所有注入的依赖项。

对于单元测试用例,您只想在setUp方法中为服务添加新的关联服务实例。就像:

@TestFor(TopService) 
class TopServiceTests {
    @Before public void setUp() {
        service.otherService = new OtherService()
    }
    ...

答案 1 :(得分:1)

我有一个CustomerRegistrationServiceTest,我的CustomerRegistrationService依赖于PasswordService。

我的CustomerRegistrationService只是像往常一样自动启动它:

class CustomerRegistrationService {
    def passwordService

在我的CustomerRegistrationServiceTest中,我有:

@TestFor(CustomerRegistrationService)
@Mock(Customer)
class CustomerRegistrationServiceTests extends GrailsUnitTestMixin {

    void setUp() {
        mockService(PasswordService)
    }

因此,当我测试CustomerRegistrationService时,它能够访问PasswordService