簡體   English   中英

如何模擬void方法,該方法接受模擬對象並期望為模擬對象實例設置一些值

[英]How to mock a void method which takes mock object and expect to set some value for mock object instance

我有一個代碼,我需要將某種類型的任何模擬對象實例傳遞給方法,並希望同一模擬實例設置一些返回值。

由於這是一個void方法,因此我正在使用doAnswer為傳入的參數設置一些值。 在這種情況下,參數是模擬對象。

現在的問題是,有什么方法可以將值設置為模擬對象並使用相同的實例進行聲明?

我嘗試使用doAnswer作為void方法。 還有其他方法可以做到這一點嗎?

doAnswer(new Answer() {
    ManageKit manageKit = new ManageKit();

    @Override
    public Object answer(InvocationOnMock invocation) throws Throwable {
        Object[] arguments = invocation.getArguments();
        if (arguments != null && arguments.length == 1 && arguments[0] != null ) {
            manageKit = (ManageKit)arguments[0];
            manageKit.setStudySchemaEventId(12);
        }
        return manageKit;
    }
}).when(mockManageKitsDao).retrieveInterventionEventId(any(ManageKit.class), any(Connection.class));
TileInfo tileInfo = doubleBliService.getTileInfo(9500, 5);
assertThat(manageKit.getStudySchemaEventId()).isEqualTo(12);

我無法直接傳遞ManageKit對象,因為它正在方法內部創建對象。 如下所示:

public TileInfo getTileInfo(int studyId, int caseDetailId) {
.......
........
ManageKit manageKit = new ManageKit();
manageKit.setCaseDetailId(caseDetailId);
manageKitsDao.retrieveInterventionEventId(manageKit, connection);
int armStudySchemaEventId = 0;
if (manageKit.getStudySchemaEventId() != null && manageKit.getStudySchemaEventId() != 0) {
    armStudySchemaEventId = manageKit.getStudySchemaEventId();
}

Mockito提供了一種機制,用於獲取傳遞給模擬方法的abject實例: ArgumentCaptor

在您的特定情況下(示意性地):

// configure
doAnswer(answer).when(mockManageKitsDao).retrieveInterventionEventId(any(ManageKit.class), any(Connection.class));
// act
TileInfo tileInfo = doubleBliService.getTileInfo(9500, 5);
// verify
ArgumentCaptor<ManageKit> argumentCaptor = ArgumentCaptor.forClass(ManageKit.class);
verify(mockManageKitsDao).retrieveInterventionEventId(argumentCaptor.capture(), any(Connection.class));
ManageKit manageKit = argumentCaptor.getValue();
assertThat(manageKit.getStudySchemaEventId()).isEqualTo(12);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM