Я использую аннотацию @Mock(answer=Answers.RETURNS_SMART_NULL)
с Mockito 1.9.5, чтобы получить некоторое исключение SmartNullPointerException, когда происходят неожиданные макетные вызовы.Mockito RETURNS_SMART_NULLS ответить странное поведение
К сожалению, тест проходит, даже не высмеивая хотя бы один важный вызов. Чтобы был ясен: Моя точка не найти сам, что я пропускаю но неудачу Тест потому я не издеваться методами. Я хотел бы сделать это без использования Mockito.verifyNoMoreInteractions(...)
Мой тест:
@RunWith(MockitoJUnitRunner.class)
public class ContextServiceImplTest {
@Mock(answer = Answers.RETURNS_SMART_NULLS)
private IAccountDAO accountDaoMock;
@Mock(answer = Answers.RETURNS_SMART_NULLS)
private IRuleService ruleServiceMock;
@Mock(answer = Answers.RETURNS_SMART_NULLS)
private ISensorDAO sensorDAOMock;
private ContextServiceImpl contextService;
@Before
public void before() {
contextService = new ContextServiceImpl(accountDaoMock, ruleServiceMock, sensorDAOMock);
}
@Test
public void fillSensor() throws Exception {
// given
String givenSensorId = "123"
final EventDTO givenEvent = new EventDTO();
givenEvent.setSensorId(givenSensorId)
// when
final Context context = contextService.getContext(givenEvent);
// then (should fail and throw explicit exception
}
Код для тестирования:
public class ContextServiceImpl {
...
public Context getContext(final EventDTO event) throws Exception {
final String sMethodName = "getContext";
final String sensorId = event.getSensorId();
Context context = new Context();
try {
final Sensor sensor = sensorDAO.findById(sensorId);
context.setSensor(sensor);
return context;
} catch (final NoResultException nre) {
throw new BusinessException(ValidationCode.UNSUPPORTED_VALUE, "sensorId");
} catch (final PersistenceException pe) {
throw new TechnicalException(TechnicalCode.DATABASE_ACCESS_PROBLEM);
}
}
Спасибо за ваши комментарии/советы/explainations.
Вам не нужно использовать '@ Before', чтобы вводить ваши mocks; вы можете просто использовать '@ InjectMocks' в поле для этого. – Makoto