В java Spring Boot, Как передать объект LDAPConnection в памяти в ldapService в интеграционном тестировании? - PullRequest
0 голосов
/ 09 апреля 2019

Я пишу интеграционные тесты для моего 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 для проверки потока интеграции.

1 Ответ

1 голос
/ 09 апреля 2019

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

public interface LDAPConnectionSource {

    LDAPConnection getLDAPConnection();

}

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

@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;
    }
}

Клиент просто AutoWires интерфейс:

public class LDAPConnectionClient {

    @Autowired
    LDAPConnectionSource source;

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

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

...