Дополнительно
Ошибка: не удается найти @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,...и т. д.
. Но меня смущает, почему он просит весны конфигурации, когда мы не хочу, чтобы инстанцировать его, но вы хотите использовать только веб-слоя. Пожалуйста, мне точку в правильном направлении, что происходит здесь. А также как это исправить. Спасибо
34
3
Так вот решение:
Документацию при обнаружении тестовой конфигурации говорит:
Так что класс
@SpringBootApplication должны быть выше в иерархии пакетов, чем тест Е класса.G если тест класс находится в пакете
ком.zerosolutions.контроллертогда
класса@SpringBootApplication должны быть в пакете выше, чем в городе..zerosolutions.пакет контроллеров-я.е ком.zerosolutionsили
ком`.Проблема
Но в случае, если класс
@SpringBootApplication
находится на том же уровне, как тестовый класс, он выиграл'т быть в состоянии найти его я.е ком.zerosolutions.общие`. В этом случае вы'll получить следующее сообщение об ошибке:Решение
Если вы используете интегрированный тест, вы можете четко указать класс
@SpringBootApplication
, как этоНо если вы хотите сделать модульное тестирование контроллера вы Дон'т должны запустить всю весну контексте. Вы можете заменить
@SpringBootTest
с@WebMvcTest(MasterController.class)
. Это будет создавать только веб-слоя сконтролирующий
, а не весь контексте Spring.Проблема
Но проблема в том, вы снова наткнетесь на ошибку, с которой мы столкнулись ранее:
И
@WebMvtTest
не имеет атрибутклассы
, как@SpringBootTest
, чтобы четко указать класс@SpringBootApplication
. Таким образом, есть два решения этой.Решение
Первый: переместить вашего класса приложения к пакету выше, чем тест I класса.е ком.zerosolutions
или
ком` пакет.Второй: упоминание класса
@SpringBootApplication
явно, как показано нижеНадеюсь, что очищает Весна тестовой конфигурации путаницы. Спасибо
Если ваш класс 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.пример, где остальной мой проект был исправить, но исправление было так просто в моем случае.
Надеюсь, это поможет кто-то.