Ошибка: не удается найти @SpringBootConfiguration, когда делаешь @WebMvcTest для весеннего контроллер

Я тестирую мой контроллер даны ниже

@Controller
public class MasterController {

@GetMapping("/")
public String goLoginPage(){
    return "index";
}
}

Я это Весна документацию, чтобы проверить мой контроллер.

Теперь, я хочу, чтобы проверить мой контроллер только создания веб-слой и не всю весну контексте, как указано в документации. Ниже мой код для того же.

@RunWith(SpringRunner.class)
@WebMvcTest
public class MasterControllerTestWithWebLayer {

@Autowired
MockMvc mockMvc;

@Autowired
MasterController masterController;

@Before
public void setUp() throws Exception {
}

@After
public void tearDown() throws Exception {
}

@Test
public void testLoginHome() throws Exception{
    mockMvc.perform(get("/"))
    .andExpect(status().isOk())
    .andExpect(view().name("index"));
}

}

Когда я запускаю этот тест, я получаю сообщение об ошибке не удалось найти @SpringBootConfiguration,...и т. д.. Но меня смущает, почему он просит весны конфигурации, когда мы не хочу, чтобы инстанцировать его, но вы хотите использовать только веб-слоя. Пожалуйста, мне точку в правильном направлении, что происходит здесь. А также как это исправить. Спасибо

Комментарии к вопросу (5)
Решение

Так вот решение:

Документацию при обнаружении тестовой конфигурации говорит:

алгоритм поиска работает с пакета, в котором содержится тест пока не найдет @SpringBootApplication или @SpringBootConfiguration аннотированного класса. Как долго, как вы структуру вашего кода в разумный способ ваш основной конфигурации обычно встречается.

Так что класс @SpringBootApplication должны быть выше в иерархии пакетов, чем тест Е класса.G если тест класс находится в пакетеком.zerosolutions.контроллертогдакласса@SpringBootApplication должны быть в пакете выше, чем в городе..zerosolutions.пакет контроллеров-я.е ком.zerosolutionsиликом`.

Проблема

Но в случае, если класс @SpringBootApplication находится на том же уровне, как тестовый класс, он выиграл'т быть в состоянии найти его я.е ком.zerosolutions.общие`. В этом случае вы'll получить следующее сообщение об ошибке:

Ява.яз.IllegalStateException: не удается найти @SpringBootConfiguration, вы должны использовать @ContextConfiguration или @SpringBootTest(классы=...) с твоим тестом

Решение

Если вы используете интегрированный тест, вы можете четко указать класс @SpringBootApplication, как это

@RunWith(SpringRunner.class)
@SpringBootTest(classes={SpringBootApp.class})

Но если вы хотите сделать модульное тестирование контроллера вы Дон'т должны запустить всю весну контексте. Вы можете заменить @SpringBootTest с @WebMvcTest(MasterController.class). Это будет создавать только веб-слоя с контролирующий, а не весь контексте Spring.

Проблема

Но проблема в том, вы снова наткнетесь на ошибку, с которой мы столкнулись ранее:

Ява.яз.IllegalStateException: не удается найти @SpringBootConfiguration, вы должны использовать @ContextConfiguration или @SpringBootTest(классы=...) с твоим тестом

И @WebMvtTest не имеет атрибут классы, как @SpringBootTest, чтобы четко указать класс @SpringBootApplication. Таким образом, есть два решения этой.

Решение

Первый: переместить вашего класса приложения к пакету выше, чем тест I класса.е ком.zerosolutionsиликом` пакет.

Второй: упоминание класса @SpringBootApplication явно, как показано ниже

@RunWith(SpringRunner.class)
@WebMvcTest(MasterController.class)
@ContextConfiguration(classes={SpringBootApp.class})

Надеюсь, что очищает Весна тестовой конфигурации путаницы. Спасибо

Комментарии (4)

Если ваш класс application.java (в src/главная/Java) находится под

Ариа.А.Б`

Ваш тестовый класс ApplicationTest.java (в src/тест/Ява) должны быть под

Ариа.А.Bиликом.А.Б.Cиликом.А.Б.С. Д`

Вы получите эту ошибку, если класс test находится под следующие пакеты

Ариа.Aиликом.А.Cиликом.А.Д`

Весной загрузки ОБЩИМ ПРАВИЛОМ ЯВЛЯЕТСЯ ТЕСТОВЫЙ КЛАСС НАЗВАНИЕ ПАКЕТА НУЖНО НАЧАТЬ С ПАКЕТА ИМЯ КЛАССА JAVA ПАКЕТ, КОТОРЫЙ БУДЕТ ИСПЫТЫВАТЬСЯ

Комментарии (2)

У меня была такая же ошибка, и обнаружил, что когда я создала проект Мой pom.xml показал моей группы как COM.пример, а не с моего домена: <группы>ком.пример</идентификатор_группы> Я исправил pom.xml должны быть: <группы>ком.мойдомен</идентификатор_группы> Далее, я изменил структуру файла с: в src/тест/Java и COM/пример " До " в src/тест/Java и COM/мойдомен Наконец, мне пришлось обновить объявление пакета, внутри моего SampleProjectApplicationTest.java файл, чтобы соответствовать правильной структуры файла. Как только все было на месте, испытания работал нормально.

Я не уверен, как я закончил с COM.пример, где остальной мой проект был исправить, но исправление было так просто в моем случае.

Надеюсь, это поможет кто-то.

Комментарии (0)