Мой контроллер работает во время выполнения, но тест mockkmvc не выполняется для зависимости, которой нет даже в классе - PullRequest
0 голосов
/ 22 декабря 2018

Когда я запускаю тест, я получаю ошибку зависимости от UserService, которая не может быть найдена для внедрения.Это странно, потому что нигде в ConstantsController.java я не использовал UserService.Кроме того, UserService правильно помечается аннотацией @Service.

Я попытался использовать аннотацию @MockBean в классе тестирования контроллера.Это дало мне неопознаваемые ошибки.Я даже попытался выполнить автоматическое подключение bean-компонента в конфигурации, потому что в журнале указано определение bean-компонента типа UserService в конфигурации.Все еще не повезло.

UserService

package com.GMorgan.RateMyFriendv5.Service;

import com.GMorgan.RateMyFriendv5.Entitiy.Role;
import com.GMorgan.RateMyFriendv5.Entitiy.User;
import com.GMorgan.RateMyFriendv5.Repository.UserRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;

@Slf4j
@Service
public class UserService {
    private UserRepository repository;

    public boolean login(String username, String password) {
        List<User> userList = repository.findByUsername(username);
        boolean isSuccessful = userList.get(0).isPassword(password);
        log.info("Username: {} isSucessful: {}", username, isSuccessful);
        return isSuccessful;
    }

     public boolean signUp(String email, String username, String password) {
        if (userEmailExists(email) || userUsernameExists(username)) return false;
        User user = new User();
        user.setEmail(email);
        user.setUsername(username);
        user.setPassword(password);
        user.setRole(Role.USER);
        repository.save(user);
        log.info("User email: {} username: {}", email, username);
        return true;
     }

    public boolean userEmailExists(String email) {
         return !repository.findByEmail(email).isEmpty();
    }

    public boolean userUsernameExists(String username) {
        return !repository.findByUsername(username).isEmpty();
    }
}

ConstantsController.java

package com.GMorgan.RateMyFriendv5.Controller;

import com.GMorgan.RateMyFriendv5.Utils.Mappings;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConstantsController {

    @Value("${controller.constant.ping.message}")
    public String pingMessage;

    @RequestMapping(Mappings.PING)
    public String ping() {
        return pingMessage;
    } 
}

ConstantsControllerTest

@RunWith(SpringRunner.class)
@WebMvcTest
@AutoConfigureMockMvc
public class ConstantsControllerTest {
    @Autowired
    private MockMvc mockMvc;

    @Value("${controller.constant.ping.message}")
    public String pingMessage;

    @Test
    public void pingTest() throws Exception {
this.mockMvc.perform(get(Mappings.PING)).andDo(print()).andExpect(status().isOk())
                .andExpect(content().string(containsString(pingMessage)));
    }
}

Я хочу пройти тест.Во время выполнения, когда я перехожу по ссылке, я вижу сообщение ping.Я тоже хочу, чтобы тест прошел.

1 Ответ

0 голосов
/ 22 декабря 2018

вам нужно указать контроллер, который вы хотите протестировать:

Добавить @WebMvcTest(ConstantsController.class) к аннотации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...