0

私はAuthenticationManager.authenticate(username,password)メソッドをテスト中SomeServiceのsomeMethodで呼び出されます。 AuthenticationManagerはSomeServiceに注入されていますPowerMock/Mockito/EasyMockを使用して依存関係注入用の模擬オブジェクトを使用するにはどうすればよいですか?

@Component 
public class SomeService { 
    @Inject 
    private AuthenticationManager authenticationManager; 

    public void someMethod() { 
     authenticationManager.authenticate(username, password); 
     // do more stuff that I want to test 
    } 
} 

は今ユニットテストのために私は何もしない、それは私の場合には、正常に働いていたふりをするauthenticateメソッドが必要なので、この方法自体は予想作業を行う場合、私は(テストすることができます認証はユニットテストの原則に従ってテストされますが、認証メソッドはそのメソッドの中で呼び出す必要があります)SomeServiceAuthenticationManagerにする必要があります。authenticate()someMethod()によって呼び出されたときに何も返しません。

PowerMock(またはPowerMockのEasyMock/Mockito)でどうすればいいですか?

答えて

3

Mockitoを使用すると、コードのこの部分で(JUnitのを使用して)ことをやるだけでした:

@RunWith(MockitoJUnitRunner.class) 
class SomeServiceTest { 

    @Mock AuthenitcationManager authenticationManager; 
    @InjectMocks SomeService testedService; 

    @Test public void the_expected_behavior() { 
     // given 
     // nothing, mock is already injected and won't do anything anyway 
     // or maybe set the username 

     // when 
     testService.someMethod 

     // then 
     verify(authenticationManager).authenticate(eq("user"), anyString()) 
    } 
} 

出来上がりを。特定の動作をしたい場合は、スタブシンタックスを使用してください。ドキュメントthereを参照してください。 また、BDDキーワードを使用していますが、これはテスト駆動型開発を実践しながらテストとコードを設計/設計するうえで役立ちます。

希望に役立ちます。

+0

ありがとうございます!本当に私のテストに革命をもたらしました! – Pete

+0

クール、私はそれが助けてうれしいです:) – Brice

関連する問題