В java Spring Boot, как передать объект LDAPConnection в памяти в ldapService при интеграционном тестировании?

Я пишу интеграционные тесты для своего API. Мне нужно протестировать поток, поэтому я реализовал ldap в памяти. Я использовал InMemoryDirectoryServer, который возвращает объект LDAPConnection для операций в памяти. Но в моем LDAPService я написал функцию getLdapConnection, которая возвращает LDAPConnection, эта функция используется для операций LDAP.

Итак, как мне передать объект LDAPConnection в памяти моим LDAPServices, чтобы каждая операция использовала объект LDAPConnection в памяти для тестирования интеграции?

Я попытался создать метод установки для объекта LDAPConnection с автоматическим подключением.

//Test class
public class LdapInMem
{
    InMemoryDirectoryServer server;
    public LDAPConnection startInMemLdapServer() throws UnknownHostException
    {
           //some in memory listener config
           return ldapConnection;
    }
}
@Service
@Repository
public class LDAPService
{   
    @Autowired
    private LDAPServerConfig ldapServerConfig;

    private LDAPConnection ldapConnection;
    public LDAPConnection getLDAPConnection()
    {
          //some server config from  ldapServerConfig
          return ldapConnection;
    }
    public function()
    {
       con = getLDAPConnection();
       con.do_ldap_stuff
    }
    public function1()
    {
       con = getLDAPConnection();
       con.do_ldap_stuff1
    }
}
//LDAP service
    public void setLdapConnection(LDAPConnection ldapConnection)
    {
        this.ldapConnection = ldapConnection;
    }

как мои тестовые примеры могут установить объект ldapConnection LDAPService из установки в памяти во время тестирования и обычно из LDAPService во время работы приложения? Так что я могу проверить свою функцию и function1 в потоке. Я ожидаю, что мой API будет использовать объект LDAPConnection в памяти для каждой операции LDAP для тестирования потока интеграции.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
340
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Код для интерфейсов, а не для реализации.

public interface LDAPConnectionSource {

    LDAPConnection getLDAPConnection();

}

Используйте профили Spring, чтобы определить, какую реализацию вы хотите запустить во время выполнения.

@Service
@Profile("integration")
public class LdapInMem implements LDAPConnectionSource
{
    InMemoryDirectoryServer server;

    @PostConstruct
    public void startInMemLdapServer() throws UnknownHostException
    {
           //some in memory listener config
    }

    public LDAPConnection getLDAPConnection() {
        return server.getConnection();  // or what ever returns a LDAPConnection
    }
}

Тестирование без интеграции.

@Service
@Profile("!integration")
public class LDAPService
{   
    @Autowired
    private LDAPServerConfig ldapServerConfig;

    private LDAPConnection ldapConnection;

    public LDAPConnection getLDAPConnection()
    {
          //some server config from  ldapServerConfig
          return ldapConnection;
    }
}

Клиент просто автоматически подключает интерфейс:

public class LDAPConnectionClient {

    @Autowired
    LDAPConnectionSource source;

    public void doLDAPStuff() {
        LDAPConnection ldapConnection = source.getLDAPConnection();
        //do stuff with the connection
    }
}

Некоторые другие вещи, которые следует учитывать при реализации. Является ли LDAPConnection потокобезопасным? Если нет, вам, вероятно, потребуется реализовать пул соединений.

Другие вопросы по теме