我正在为我的API编写集成测试。我必须测试流程,这就是为什么要实现内存ldap的原因。我使用了InMemoryDirectoryServer,它在内存操作中返回LDAPConnection对象。但是,在我的LDAPService中,我编写了getLdapConnection函数,该函数返回LDAPConnection,该函数用于LDAP操作。
那么如何将内存中的LDAPConnection对象传递给我的LDAPServices,以便每个操作都将内存中的LDAPConnection对象用于集成测试?
我尝试为自动装配的LDAPConnection对象创建setter方法。
//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;
}
我的测试用例如何在测试时从内存设置中设置LDAPService的ldapConnection对象,而在运行应用程序时通常如何从LDAPService设置?
因此,我可以在流程中测试我的功能和function1。
我希望我的API对每个LDAP操作都使用内存中的LDAPConnection对象,以测试集成流程。
最佳答案
接口的代码不是实现。
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;
}
}
客户端只是自动装配接口:
public class LDAPConnectionClient {
@Autowired
LDAPConnectionSource source;
public void doLDAPStuff() {
LDAPConnection ldapConnection = source.getLDAPConnection();
//do stuff with the connection
}
}
有关实现的其他注意事项。
LDAPConnection
线程安全吗?如果没有,您可能需要实现一个连接池。