Получение UnfinishedStubbingException при насмешке над методом void - PullRequest
0 голосов
/ 09 июля 2020

Попытка использовать метод mock void с использованием JUnit4, а затем получить исключение ниже

Ниже приведено определение класса

@Mock
private TestService service;

@Mock
private DatabaseService mockDatabase;

@Before
public void setUpMock() throws Exception {

    LOGGER.info("########### Moke setUp started ###########");

    conn = Mockito.mock(Connection.class);
    MockitoAnnotations.initMocks(this);

    LOGGER.info("########### Moke setUp completed ###########");
}


@Test
public void testSuccess() {
    try {
        
        when(mockDatabase.getDBConnection()).thenReturn(conn);
        Mockito.doNothing().when(service).deleteKeyInfo(mockDatabase.getDBConnection(), userBn, 1, "1");
    } catch (Exception e) {
        fail("### testDeviceIdNull ### Failed with following error: " + getStackTrace(e));
    }
}

Но ниже исключение

java.lang.AssertionError: ### Failed with following error: org.mockito.exceptions.misusing.UnfinishedStubbingException: 
Unfinished stubbing detected here:


E.g. thenReturn() may be missing.
Examples of correct stubbing:
    when(mock.isOk()).thenReturn(true);
    when(mock.isOk()).thenThrow(exception);
    doThrow(exception).when(mock).someVoidMethod();
Hints:
 1. missing thenReturn()
 2. you are trying to stub a final method, which is not supported
 3. you are stubbing the behaviour of another mock inside before 'thenReturn' instruction is completed

Ниже приведено значение void метод

public void deleteKeyInfo(Connection conn, UserBn userBn, Integer smId, String dId) throws Exception {
    // Deleting key
        
}

1 Ответ

2 голосов
/ 10 июля 2020

Вы насмехаетесь внутри насмешки. Вы вызываете getDBConnection (), который выполняет насмешку, прежде чем вы закончите издевательство для службы.

Mockito не любит, когда вы это делаете.

Заменить:

try {
        
        when(mockDatabase.getDBConnection()).thenReturn(conn);
        Mockito.doNothing().when(service).deleteKeyInfo(mockDatabase.getDBConnection(), userBn, 1, "1");
    }

с:

try {
        
        when(mockDatabase.getDBConnection()).thenReturn(conn);
        some_variable_name =  mockDatabase.getDBConnection();         
        Mockito.doNothing().when(service).deleteKeyInfo(some_variable_name, userBn, 1, "1");
    }

Пожалуйста, проверьте это: В Mockito обнаружены незаконченные заглушки для получения дополнительной информации

...