Я использую Mockito 1.9.5, чтобы попробовать и проверить метод. Вот метод:Смещение возвращаемого значения
@Autowire
AuditLogRepository auditlogRepository;
//method stuff abbreviated out
if (authentic.isAuthorized()) {
menuService.updateUserWithMenu(authentic);
AuditLog auditor = Helper.buildAuditor(authentic);
auditor.setAccessPoint(request.getRequestURL().toString());
....
AuditLog createdAuditLog = auditlogRepository.save(auditor);
logger.debug("Created AuditLog id = " + createdAuditLog.getID());
...
}
А вот как я пытаюсь проверить:
@InjectMocks
LoginController loginController;
@Mock
AuditLog aLog;
@Mock
AuditLog createdAuditLog;
@Mock
AuditLogRepository auditlogRepositoryMock;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(loginController).build();
}
@Test
public void testLogin() throws Exception {
...
AuditLog aLog = mock(AuditLog.class);
when(auditlogRepositoryMock.save(aLog)).thenReturn(createdAuditLog);
when(createdAuditLog.getID()).thenReturn(new Long(1));
Похоже, независимо от того, что я делаю, Mockito всегда будет возвращать нуль, за исключением примитивов. Но мой код будет действовать на возвращаемое значение. Итак, мой вопрос - есть ли способ проверить это, не получив нулевого указателя? Может ли Mockito вернуть объект из вызова метода?
Я по-прежнему привык к самому Моккито (использовал его только около 4 месяцев), поэтому опубликую это как комментарий, а не ответ. Я считаю, что вы говорите, что возвращаете 'createdAuditLog', когда вы вызываете' save() 'с объектом (' aLog'). Я использую класс 'Matcher' для установки, когда/thenReturns. Подобно этому 'when (auditlogRepositoryMock.save (Matchers.any (AuditLog.class)). ThenReturn (createdAuditLog);' – Kyle
yes, mockito может возвращать объекты, можете ли вы предоставить больше информации о своем nullpointer? – Vegard
@Kyle с моей точки зрения ваш комментарий правильный. Когда метод save не вызывается с экземпляром aLog, возврат не будет использоваться, а mockito будет использовать свое поведение по умолчанию. Без полного кода это лучший ответ, чтобы дать. Поэтому опубликуйте его как ответ;). – mszalbach