Я написал весенний тест интеграции загрузки, и он работает. Вот конфигурация теста:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT)
@AutoConfigureMockMvc
@Transactional
public class SomeTest {
@Autowired
private MockMvc mvc;
@Test
public void insertEventTest(){
...testing something...
}
}
Я понимаю, что при установке webEnvironment = RANDOM_PORT
spring инициализирует встроенный веб-сервер и запускает этот тест на этом веб-сервере. Я посмотрел журналы при запуске этого теста и увидел, что встроенный TomcatWebServer
был запущен. Инициализация Tomcat занимает около 6 секунд, но между этими двумя частями журналов инициализировалось несколько других bean-компонентов, поэтому я уверен, что инициализация Tomcat была не 6, а менее чем 6 секундами. Одна часть журналов:
2019-10-13 16:03:20.065 INFO 8596 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 0 (http)
2019-10-13 16:03:20.098 INFO 8596 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-10-13 16:03:20.098 INFO 8596 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.14]
2019-10-13 16:03:20.108 INFO 8596 --- [ main] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]
2019-10-13 16:03:20.228 INFO 8596 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
... еще несколько журналов, а затем, наконец,
2019-10-13 16:03:26.366 INFO 8596 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 38335 (http) with context path ''
Я запускаю тест 3 раза, и тестирование занимает 12, 11,4 и 12 секундполный. После этого я попытался установить @SpringBootTest(webEnvironment = MOCK)
. Я заметил, что на этот раз Tomcat
не был инициализирован (веб-сервер был издевался над весной). Время выполнения составляло 11,3, 11 и 10,8 секунды. В обоих случаях все тесты были зелеными. Я думал о том, что я улучшу производительность своих тестов с помощью поддельного веб-сервера, но я получил 1 секунду. Если мы имеем в виду, что мой прикладной контекст кэшируется между тестовыми классами, я в принципе ничего не получил. Поэтому мой вопрос в том, в каких случаях тест пройдёт с @SpringBootTest(webEnvironment = RANDOM_PORT)
и завершится неудачей с @SpringBootTest(webEnvironment = MOCK)
или наоборот, и когда мне следует использовать RANDOM_PORT
и когда MOCK
?