Я пытаюсь протестировать свой контроллер отдельно от контекста приложения Spring.
Вот мой контроллер
@RestController
public class AddressesController {
@Autowired
service service;
@GetMapping("/addresses/{id}")
public Address getAddress( @PathVariable Integer id ) {
return service.getAddressById(id);
}
}
Мой сервисный интерфейс
public interface service {
Address getAddressById(Integer id);
}
А вот и мой тестовый класс
@ExtendWith(SpringExtension.class)
@WebMvcTest
public class AddressControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
service myService;
@Test
public void getAddressTest() throws Exception {
Mockito.doReturn(new Address()).when(myService).getAddressById(1);
mockMvc.perform(MockMvcRequestBuilders.get("/addresses/1"))
.andExpect(status().isOk());
}
}
Вот исключение, которое я получаю:
org.mockito.exceptions.misusing.NullInsteadOfMockException: аргумент, переданный в when(), равен нулю! Пример правильной заглушки: doThrow(new RuntimeException()).when(mock).someMethod(); Кроме того, если вы используете аннотацию @Mock, не пропустите initMocks()
Как будто служба никогда не создается. Как я могу решить эту проблему?
Мы можем решить эту проблему, используя @RunWith(SpringRunner.class)
вместо @ExtendWith(SpringExtension.class)
. Может ли кто-нибудь объяснить, почему это работает? Обычно первая аннотация относится к junit4, а вторая — к junit5.
@MockBean
не является аннотацией Mockito. Вместо этого попробуйте@Mock
- person Valijon   schedule 09.07.2019