Я тестирую мой контроллер даны ниже
@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,...и т. д.
. Но меня смущает, почему он просит весны конфигурации, когда мы не хочу, чтобы инстанцировать его, но вы хотите использовать только веб-слоя. Пожалуйста, мне точку в правильном направлении, что происходит здесь. А также как это исправить. Спасибо
Так вот решение:
Документацию при обнаружении тестовой конфигурации говорит:
алгоритм поиска работает с пакета, в котором содержится тест пока не найдет @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})
Надеюсь, что очищает Весна тестовой конфигурации путаницы. Спасибо
Если ваш класс application.java (в src/главная/Java) находится под
Ариа.А.Б`
Ваш тестовый класс ApplicationTest.java (в src/тест/Ява) должны быть под
Ариа.А.Bили
ком.А.Б.Cили
ком.А.Б.С. Д`
Вы получите эту ошибку, если класс test находится под следующие пакеты
Ариа.Aили
ком.А.Cили
ком.А.Д`
Весной загрузки ОБЩИМ ПРАВИЛОМ ЯВЛЯЕТСЯ ТЕСТОВЫЙ КЛАСС НАЗВАНИЕ ПАКЕТА НУЖНО НАЧАТЬ С ПАКЕТА ИМЯ КЛАССА JAVA ПАКЕТ, КОТОРЫЙ БУДЕТ ИСПЫТЫВАТЬСЯ
У меня была такая же ошибка, и обнаружил, что когда я создала проект Мой pom.xml показал моей группы как COM.пример, а не с моего домена:
<группы>ком.пример</идентификатор_группы>
Я исправил pom.xml должны быть:
<группы>ком.мойдомен</идентификатор_группы>
Далее, я изменил структуру файла с:
в src/тест/Java и COM/пример " До " в src/тест/Java и COM/мойдомен
Наконец, мне пришлось обновить объявление пакета, внутри моего
SampleProjectApplicationTest.java
файл, чтобы соответствовать правильной структуры файла. Как только все было на месте, испытания работал нормально.
Я не уверен, как я закончил с COM.пример, где остальной мой проект был исправить, но исправление было так просто в моем случае.
Надеюсь, это поможет кто-то.