0

メソッドを試してテストするためにMockito 1.9.5を使用しています。メソッドは次のとおりです。

@Autowire
AuditLogRepository auditlogRepository;

//method stuff abbreviated out

if (authentic.isAuthorized()) {
    menuService.updateUserWithMenu( authentic );
    AuditLog auditor = Helper.buildAuditor( authentic );
    auditor.setAccessPoint( request.getRequestURL().toString() );
    ....
    AuditLog createdAuditLog = auditlogRepository.save( auditor );
    logger.debug( "Created AuditLog id = " + createdAuditLog.getID() );
    ...

}

そして、これが私がそれをテストしようとしている方法です:

@InjectMocks
LoginController loginController;

@Mock
AuditLog aLog;

@Mock
AuditLog createdAuditLog;

@Mock
AuditLogRepository auditlogRepositoryMock;

@Before
public void setUp() {
    MockitoAnnotations.initMocks( this );
    this.mockMvc = MockMvcBuilders.standaloneSetup( loginController ).build();
}

@Test    
public void testLogin() throws Exception {
    ...
    AuditLog aLog = mock( AuditLog.class );
    when( auditlogRepositoryMock.save( aLog ) ).thenReturn(createdAuditLog );
    when( createdAuditLog.getID() ).thenReturn( new Long( 1 ) );

私が何をしても、プリミティブを除いて、Mockito は常に null を返すようです。しかし、私のコードは戻り値に基づいて動作します。だから私の質問は、ヌルポインタを取得せずにこれをテストする方法はありますか? Mockito はメソッド呼び出しからオブジェクトを返すことができますか?

4

2 に答える 2

1

テストにはフィールドとローカル変数の両方としてモックがありますが、呼び出しに渡されたインスタンスは呼び出しによってテスト対象のコードで実際に作成されるAuditLogため、どちらも実際にはテスト対象のコードで使用されていないと思われますAuditLogauditlogRepositoryMock.save

AuditLog auditor = Helper.buildAuditor( authentic );

テストからこの引数を実際に制御する必要がある場合は、テストしているコードを変更して、それを許可する必要がある場合があります。

渡された の値をあまり気にしない場合はAuditLog、スタブを変更して、より寛容な を使用できますMatcher。おそらく次のようなものです。

when( auditlogRepositoryMock.save( argThat(any(AuditLog.class)) ) ).thenReturn(createdAuditLog );

これにより、リポジトリ モックがcreatedAuditLogのすべての呼び出しに対してテスト値を返すようになりますsave

于 2013-05-26T20:40:22.413 に答える
0

Mockito はメソッド呼び出しからオブジェクトを返すことができますか?

はい、@MockアノテーションのAnswersをデフォルト値から変更して、モック、スタブを返したり、実際のメソッドを呼び出したり、その他の動作をしたりできます。null

@Mock(answer = RETURNS_MOCKS)
AuditLogRepository auditlogRepositoryMock;
于 2013-05-26T20:43:23.937 に答える