Я хотел провести интеграционное тестирование моего API.
@RestController
@RequestMapping("/api/v1")
public class TestController {
@Autowired
TestService testService;
@RequestMapping("/welcome")
public String welcomeMessage(@RequestParam("name") String name) {
return testService.welcomeMessage(name);
}
}
Ниже приведен интерфейс службы и его реализация:
public interface TestService {
public String welcomeMessage(String name);
}
public class TestServiceImpl implements TestService{
@Autowired
TestRepository repo;
@Override
public String welcomeMessage(String name) {
repo.save(new StringEntity(name));
return "Hello "+name;
}
}
Ниже приведен тестовый пример:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MockitoTestingApplicationTests {
@Autowired
MockMvc mvc;
@MockBean
TestService testService;
@MockBean
TestController testController;
@Test
public void contextLoads() throws Exception {
Mockito.when(testController.welcomeMessage(ArgumentMatchers.anyString())).thenCallRealMethod();
Mockito.when(testService.welcomeMessage(ArgumentMatchers.anyString())).thenCallRealMethod();
mvc.perform(get("/api/v1/welcome").param("name", "dude")).andExpect(status().isOk());
}
}
У меня есть несколько вопросов.
, когда я выполняю приведенный выше код, он выдает ошибку, говоря, что не может вызвать реальный метод для абстрактных методов.И когда я издеваюсь над TestServiceImpl
, он бросает NullPointerException
в контроллер, потому что TestService
равен нулю.Как мне это исправить?
Как мне издеваться над уровнем хранилища, когда мы используем MongoDB.когда я пытаюсь смоделировать MongoTemplate
, выдает ошибку, говорящую MongoConvertor must not be null
Это правильный способ написания тестовых случаев.можем ли мы получить покрытие кода без использования thenCallRealMethod()
?
Пожалуйста, предложите мне, как поступить.Заранее спасибо.