未完成的存根异常收到用于 JUnit 测试



嗨,我正在尝试使用 Mockito 测试一种方法并收到未完成的存根异常。我是Mockito的新手,不确定我是否正在做一些了不起的事情:)

这些是我的存根

 @InjectMocks
Constants constants;
@Mock
PreGeneratedAccountRepository preGeneratedAccountRepository;
@InjectMocks
PopulateUnqiueAccountNumber populateUnqiueAccountNumber;
@Before
public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
}

和我的测试方法

 @Test
public void testCheckAvailableAccountNumbersForSuccess() throws Exception {
    populateUnqiueAccountNumber.setMinCount(2);
    populateUnqiueAccountNumber.setInsertRecordCount(2);
    long preGeneratedRowCount = 1;
    long preGeneratedAccountCount = 0;
    long accountNum = 8609024563l; 
    PreGeneratedAccount preGeneratedAccount = new PreGeneratedAccount();
    when(preGeneratedAccountRepository.countByAcctNumAvailableFlag(Constants.FALSE)).thenAnswer(new Answer<Long>() {
        @Override
        public Long answer(InvocationOnMock invocation) throws Throwable {              
            return preGeneratedRowCount;
        }
    });
    when(preGeneratedAccountRepository.countByAccountNum(accountNum)).thenAnswer(new Answer<Long>() {
        @Override
        public Long answer(InvocationOnMock invocation) throws Throwable {              
            return preGeneratedAccountCount;
        }
    });
    when(preGeneratedAccountRepository.saveAndFlush(preGeneratedAccount));
    // call testing method
    populateUnqiueAccountNumber.checkAvailableAccountNumbers();
    // Verify the mock calls
    verify(preGeneratedAccountRepository, times(1)).countByAcctNumAvailableFlag(Constants.FALSE);
    verify(preGeneratedAccountRepository, times(1)).countByAccountNum(accountNum);
    verify(preGeneratedAccountRepository, times(1)).saveAndFlush(preGeneratedAccount);
}

和我的服务方法

 @Scheduled(cron = "${app.config.cron.rate}")
public void checkAvailableAccountNumbers() {
    LOGGER.debug("Method execution started :: " + new Date());
    try {
        long rowCount = preGeneratedAccountRepository.countByAcctNumAvailableFlag(Constants.FALSE);
        LOGGER.debug("Available account numbers in Database" + rowCount);
        int totalRecordInserted = 0;
        if (rowCount < minCount) {
            do {
                int count = insertRecordCount - totalRecordInserted;
                LOGGER.debug("Number of Record need to insert::" + count);
                int recordInserted = insertAccountNumbers(count);
                totalRecordInserted = totalRecordInserted + recordInserted;
                LOGGER.debug("totalRecordInserted::" + totalRecordInserted);
            } while (totalRecordInserted < insertRecordCount);
        }
    }
    catch (DataAccessException e) {
        LOGGER.error("An exception was encountered when inserting account numbers", e);
        throw e;
    }
    LOGGER.debug("Method execution ended :: " + new Date());
}

我在服务中的此行收到错误

preGeneratedAccountRepository.countByAcctNumAvailableFlag(Constants.FALSE);

例外

    Unfinished stubbing detected here:
-> at com.cardinalhealth.chh.batch.PopulateUnqiueAccountNumberTest.testCheckAvailableAccountNumbersForSuccess(PopulateUnqiueAccountNumberTest.java:80)
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, you naughty developer!
 3: you are stubbing the behaviour of another mock inside before 'thenReturn' instruction if completed

任何帮助都值得赞赏:)

你的问题是这一行。

when(preGeneratedAccountRepository.saveAndFlush(preGeneratedAccount));

您尚未指定在调用此方法时希望 Mockito 执行的操作。

另请注意,当您不需要时,您已经使用了两次Answer。 每次使用Answer时,您都可以只使用thenReturn,例如,

when(preGeneratedAccountRepository.countByAcctNumAvailableFlag(Constants.FALSE)).thenReturn(pregeneratedAccountCount);

相关内容

  • 没有找到相关文章