Spring嵌入式ldap服务器进行单元测试

Ken*_*Lai 9 spring spring-security spring-ldap

我目前正在尝试使用嵌入式ldap服务器进行单元测试.

在Spring Security中,您可以快速定义嵌入式ldap服务器,以便使用从指定的ldif加载的一些示例数据对标记进行测试.

我将使用Spring Ldap执行ldap操作,并考虑测试用户服务对象的常用CRUD功能.

但是,有没有办法确保嵌入式服务器中的条目处于相同的一致状态(有点像删除所有并重新加载ldif条目)我正在运行的每个测试?

我想到了以下内容:1)表明该方法污染了上下文,并强制重新创建嵌入式ldap服务器,这听起来很痛苦,因为它必须为每个方法重新启动服务器2)在测试组织中创建测试条目,这样我就可以取消绑定它们,然后再在那里再次加载ldif文件.

我更喜欢2,但似乎Spring LDAP没有好的帮助器来加载和发送ldif文件的内容.

有关如何使用spring的嵌入式ldap服务器或我提到的两种可能解决方案执行ldap测试的任何建议?

谢谢

Kev*_*ams 5

我可能在这里偏离了轨道,但如果您不测试 LDAP 集成本身,您可以使用模拟对象模拟 LDAP 连接,该对象始终返回您期望的值,以便您的其他单元测试可以完成。

如果您正在测试 LDAP 连接,那么您实际上是在进行集成测试。在这种情况下,最好连接到真正的 LDAP 实现。


小智 4

Spring LDAP 不提供围绕 LDAP 操作的事务控制吗?如果是这样,为什么不使用具有自动回滚功能的 Spring 测试框架呢?

我还知道一个 JDBC-LDAP 桥驱动程序,它包装了 LDAP 存储库,将其呈现为关系数据库。我已经使用 iBatis 来连接到此(我已在http://lokibear.blogspot.com上编写了此内容,请参阅 7 月份的文章)。我还没有尝试应用事务控制,但驱动程序的网站提到了忽略事务的能力(这意味着您也不能忽略它们......对吗?)。

就像我说的,我还没有尝试过这个;但是,如果这提供了围绕 LDAP 的事务,那么您可以再次使用 Spring 测试框架来实现自动回滚。我已经围绕该框架发布了一份快速备忘单 - 请参阅我博客上的 9 月份帖子。

抱歉,我可能无法实现您的目标;但也许这些建议是有用的。祝你好运!