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アノテーションで使用すると動作が悪くなります)。あなたは今、それらの悪い行動の1つを見ています。

拡張する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 に答える