简体   繁体   中英

Getting UnfinishedStubbingException while mocking void method

Trying mock void method using JUnit4 then getting below exception

Below is the class definition

@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));
    }
}

But getting below exception

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

Below is the void method

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

You're nesting mocking inside of mocking. You're calling getDBConnection(), which does some mocking, before you've finished the mocking for service.

Mockito doesn't like it when you do this.

Replace:

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

with:

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

Please check this: Unfinished Stubbing Detected in Mockito for more information

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM