5

测试依赖于另一个服务的 Grails 服务的最佳实践是什么?默认 mixin TestFor 正确注入被测服务,例如:

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

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

class TopService {
    def innerService
}

innerService 将不可用,依赖注入似乎没有填充这个变量。我应该如何进行?

4

2 回答 2

8

集成测试不应该使用@TestFor注解,他们应该使用extend GroovyTestCase. 测试注释仅用于单元测试(在集成测试中使用时会出现不良行为,尤其是@Mock注释)。您现在正在看到其中一种不良行为。

如果你扩展GroovyTestCase你就可以

def topService

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

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

@TestFor(TopService) 
class TopServiceTests {
    @Before public void setUp() {
        service.otherService = new OtherService()
    }
    ...
于 2012-06-13T17:34:47.053 回答
1

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

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

class CustomerRegistrationService {
    def passwordService

在我的 CustomerRegistrationServiceTest 我有:

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

    void setUp() {
        mockService(PasswordService)
    }

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

于 2012-06-13T15:25:31.113 回答