2017-03-21 33 views
1

Mockito版本:v2.7.5/19如何在2.7.x中使用Mockito.doReturn

例外:

org.mockito.exceptions.misusing.UnfinishedStubbingException: 
Unfinished stubbing detected here: 
-> at com.mckesson.dex.dao.code.CodeDaoMockTest.testExcluded(CodeDaoMockTest.java:33) 

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 if completed 

這裏是我的代碼:

@RunWith(MockitoJUnitRunner.class) 
public class CodeDaoMockTest 
{ 
    @Mock(name = "entityManager") private HibernateEntityManager entityManager; 
    @Spy @InjectMocks 
    private CodeDao dao; 

    @Test 
    public void testExcluded() throws Exception 
    { 

     LabTestClassification ltc1 = new LabTestClassification(); 
     LabTestClassification ltc2 = new LabTestClassification(); 

     Mockito.doReturn(533965, 533966) 
      .when(dao.getNextCodeIntegerFromSequence(ltc1 )); 

值得注意的是,如果我這樣寫:

Mockito.when(dao.getNextCodeIntegerFromSequence(ltc1 )).thenReturn(533965); 

我得到一個空指針到一個呼叫entityManager。我的理解是,如果我使用doReturn那麼實際的getNext...永遠不會被調用,這是目標。

回答

3

你就近了。嘗試使用不同的語法:

Mockito.doReturn(533965).when(dao).getNextCodeIntegerFromSequence(ltc1);