0

AuthenticationManager.authenticate(username,password)テスト中の SomeService の someMethod で呼び出されるメソッドがあります。AuthenticationManager は SomeService に注入されます。

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

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

単体テストでは、認証メソッドが正しく機能したふりをする必要があります。私の場合は何もしないので、メソッド自体が期待どおりに動作するかどうかをテストできます (認証は、単体テストの原則に従って他の場所でテストされますが、認証の必要があります)そのメソッド内で呼び出される)だから私は考えています.によって呼び出されたときに戻り、他に何もしないSomeServiceモックを使用する必要があります.AuthenticationManagerauthenticate()someMethod()

PowerMock (または PowerMock の一部である EasyMock / Mockito) でそれを行うにはどうすればよいですか?

4

1 に答える 1

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())
    }
}

そして出来上がり。特定の動作が必要な場合は、スタブ構文を使用してください。そこのドキュメントを参照してください。また、BDD キーワードを使用したことにも注意してください。これは、テスト駆動開発の実践中にテストとコードを作業/設計するための優れた方法です。

それが役立つことを願っています。

于 2012-02-14T15:03:57.007 に答える