#spring #spring-boot #integration-testing #mockmvc #spring-test-mvc
#spring #пружинный ботинок #интеграция-тестирование #mockmvc #spring-test-mvc #spring-boot
Вопрос:
Я запускаю интеграционные тесты для своего API, который работает с LDAP-сервером в памяти. Иногда тесты выполняются правильно, а иногда нет. Почему это происходит ?
Я пробовал оптимизировать тестовые примеры и уменьшить количество тестовых примеров. Индивидуально каждый тест проходит успешно.
//LDAPInMem.java
public class LdapInMem {
{
function startServer()
{
InMemoryDirectoryServer server;
InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig();
//some server configuration code
server.startListening();
}
}
//Integration test
import LDAPInMem
public class UserControllerIntegrationTest {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setup()
{
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
LDAPInMem.startServer();
}
@Test
public void fun1()
{
//some mockMvc testcase which deals with in-memory server
}
@Test
public void fun2()
{
//some mockMvc testcase which deals with in-memory server
}
@Test
public void fun3()
{
//some mockMvc testcase which deals with in-memory server
}
}
Эти тестовые примеры иногда терпят неудачу, хотя все остальное в порядке. Почему это происходит ? Связано ли это с потоком ? Что можно сделать в этом случае, чтобы правильно запустить эти тестовые примеры?
Комментарии:
1. Вы запускаете приложение, после этого запускается сервер ldap server. В зависимости от того, запускается ли он достаточно быстро или нет, ваш тест может завершиться неудачей или нет. Ваш сервер ldap должен запускаться при начальной загрузке приложения, а не в
@Before
вашем тесте.2. Я не уверен в этом, но это не связано с проблемой, связанной с подключением. Я предполагаю, что тесты не выполняются из-за последовательности выполнения!
3. @M.Deinum, если вы так говорите. что можно сделать для запуска сервера ldap перед загрузкой приложения?
4. Сделайте встроенный ldap частью конфигурации вашего приложения вместо того, чтобы запускать его в своем тесте. Поместите эту логику в
@Configuration
класс, который загружает сервер LDAP, а затем использует его.5. Я использую встроенный ldap только для тестирования. Для prod у меня есть отдельный класс @Configuration для конфигураций сервера LDAP.