@WebMvcTest, @DataJpaTest Интересно, это «модульные тесты» или «интеграционные тесты». - PullRequest
1 голос
/ 22 июня 2019

Я плохо разбираюсь в английском.Пожалуйста, поймите.

Я знал.Использование @SpringBootTest() Аннотация для загрузки всего Бина явно воспринималось как «Integration Test.»

Однако использование @SpringBootTest(classes=mybean.class) считалось «модульным тестом», потому что он запускает толькоопределенный (выбранный) "Bean(Class)", хотя он работает весной.

Я также думал, что способ использования @ContextConfiguration "также" Unit Tests. "Поскольку я думал, что могут выполняться только определенные классы, такие как @ContextConfusion(classes=myBean.class).

Но это была моя ошибкаЯ получил ответ на последний StackOverflow.

@ SpringBootTest vs @ContextConfiguration vs @Import in Spring Boot Unit Test

Мой последний вопрос -> Использовать ли @ContextConfiguration может быть «модульным тестом» $$$ answer ---> Нет, не может, это интеграционный тест, который запускает только один класс весной. Обычно мы не запускаем только один класс с Spring Framework.преимущество запуска его внутри контейнера Spring, если вы хотите протестировать код только одного класса (модуля)? Да, в некоторых случаях это может быть пара классов, но не десятки или сотни. Если вы запускаете один класс сВесной тогда, в любом случае, вам придется высмеивать все его зависимости, то же самое можно сделать с mockito ...

Поэтому я снова спрашиваю.

Является ли "@WebMvcTest"также "Integration Tests"? Я думал, что "@WebMvcTest" было "Unit Test".Однако, исходя из последнего ответа, @WebMvcTest также имеет пружинный ход.Таким образом, логика последнего ответа такова, что «@WebMvcTest» также «Integration Test», но я все еще не понимаю.

Я в замешательстве.Я просто играю словами?

  1. Модульный тест или интеграционный тест ...
  2. Является ли @WebMvcTest также "Integration Test"?

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

Во-первых, некоторые определения взяты с веб-сайта Основы тестирования программного обеспечения :

UNIT TESTING - это уровень тестирования программного обеспечения, при котором отдельные узлы / компонентыпрограммного обеспечения тестируются.Цель состоит в том, чтобы проверить, что каждая единица программного обеспечения работает так, как задумано.

ПРОВЕРКА ИНТЕГРАЦИИ - это уровень тестирования программного обеспечения, при котором отдельные устройства объединяются и тестируются как группа.Целью этого уровня тестирования является выявление ошибок во взаимодействии между интегрированными модулями.

Чтобы ответить на ваш вопрос, три аннотации @SpringBootTest, @ContextConfiguration и @WebMvcTest все участвуют в загрузке подмножества компонентов Spring.Следовательно, они связаны с интеграционным тестированием.

0 голосов
/ 22 июня 2019

Цитата из весны Док :

True модульные тесты обычно выполняются очень быстро, так как нет инфраструктура времени выполнения для настройки. Подчеркивая истинные юнит-тесты как часть вашей методологии разработки может повысить вашу производительность.

Spring также является своего рода инфраструктурой времени выполнения. Поэтому модульное тестирование должно выполняться без привлечения других сред, даже Spring.


Тогда у него есть целый раздел , чтобы поговорить об интеграционном тестировании, введя Spring TestContext Framework, который он описывает как:

Spring Framework обеспечивает первоклассную поддержку интеграции тестирование в модуле пружинного тестирования. Имя фактического файла JAR может включать в себя версию выпуска и может быть в org.springframework.test, в зависимости от того, откуда вы его взяли (см. раздел об управлении зависимостями для объяснения). Эта библиотека включает в себя пакет org.springframework.test, который содержит ценные классы для интеграционного тестирования с контейнером Spring .

@ContextConfiguration взято из Spring TestContext Framework, в то время как Spring Boot опирается на него сверху, чтобы обеспечить @SpringBootTest и @WebMvcTest и т. Д. Так что все эти вещи предназначены для тестирования интеграции.

Итак, подведем итог: если тест требует запуска Spring для запуска, например @WebMvcTest, это не модульный тест, а интеграционный тест.

...