как тесты выполняются при загрузке Spring при выполнении интеграции с сервером in memory?

#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.