luchob/softuni-feb2023

56% coverage

Closed this issue · 2 comments

https://github.com/IvailoB/SoftUni-Java-WEB/tree/main/CarWeb

все още имам проблем с 2 теста.
Знам че проблема е в мен не в тестовете, но все пак колко ги мъчих и нищо.

luchob commented

Здравей!

Относно първият тест.

    @Test
    void testAddConfirm() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.post("/cars/add"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.view().name("redirect:/cars/details/{id}"));
    }

Пускаш POST request с празно body. Контролерът обаче очаква нещо съвсем друго. Някакво DTO + principal,
няма и BindingResult след него:

    @PostMapping("/add")
    public String addConfirm(@Valid AddCarDTO addCarDTO,
                             Principal principal) throws IOException {
    }

В такъв случай спринг връща грешка 400 - рекуестът е невалиден:

java.lang.AssertionError: Status expected:<200> but was:<400>
Expected :200
Actual   :400

Как се емулира POST request -> Тук.

Как се слага тестов юзър заради спринг секюрити -> Тук.

luchob commented

Относно вторият тест:

    @Mock
    private UserService mockUserService;

Това е мокито мок. Т.е. това е нещо, което може да правиш в юнит тестове, а не в интегрейшън. В интегрейшън тестовете има една анотация @MockBean, която не ти е необходима тук.

Това което ти е необходимо, например е WithMockUser & Co. Виж предния ми отговор и започни оттам.

Ако продължават грижите, ще помагаме :-)

Поздрави,
Л.