测试依赖于其他服务的Grails服务的最佳做法是什么? 默认的mixin TestFor正确地注入了测试中的服务,例如:
@TestFor(TopService)
class TopServiceTests {
@Test
void testMethod() {
service.method()
}
}
但是如果我的TopService(服务)实例依赖于另一个服务,比如InnerService:
class TopService {
def innerService
}
innerService将不可用,依赖注入似乎不会填充此变量。我该怎么办?
答案 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