2011-10-10 98 views
4

为了测试目的,我需要模拟XMPP服务器。我目前的意图是运行本地XMPP服务器并绑定我的测试代码,但是我想知道是否有人知道XMPP模拟库已经存在?嘲笑XMPP服务器的建议

+1

我不知道这是否有用,但在书[面向生长对象的软件,由测试引导](http://www.growing-object-oriented-software.com/)上,作者举了一个例子测试使用XMPP的应用程序,他们选择启动OpenFire服务器,而不是模拟它。如果可以的话,可以获得一份副本,因为他们也谈论了很多关于如何测试异步应用程序......而且它非常**,**非常好。 – Augusto

回答

3

这可能在某种程度上取决于您使用的工具,但在Smack中,例如,您可以创建自己的Connection类作为模拟服务器。这是在Smack的测试案例中完成的。

基本上,您将回复IQ或消息数据包提供给连接,然后通过API拨打电话。然后将预设数据包作为结果返回。你必须考虑的一件事是XMPP的异步特性,并确保你的测试服务器将以同样的方式工作。

其他XMPP库可能提供了一些类似的方法来启用单元测试。

另一方面,如果您正在尝试运行全面的集成测试场景,那么我认为本地服务器是正确的选择。

3

要成功地模拟整个XMPP服务器,你基本上最终会得到一个XMPP服务器。我个人认为这是测试整体的最可靠的方法,但我使用更小的更具体的测试来测试自包含的代码段。

你会发现这本书的章节有趣的Remko可能是最考验痴迷的人,我知道,这是写出了自己最近的经验开发客户端:你自己http://el-tramo.be/blog/beautiful-xmpp-testing

+0

有一个读了这个。 http://martinfowler.com/articles/mocksArentStubs.html特别是“嘲笑和存根之间的区别”这部分将会帮助你确定。我在脑海里明确地澄清了一些事情 –

1

只有模拟类型 - 搜索这篇文章由Freeman n co ..

这个想法是,你应该只嘲笑你控制的角色。在这种情况下,XMPP服务器的接口不是您控制的接口。因此,定义您的应用需要的角色(接口)&,这是由XMPP服务器满足的。

您可能会得到一个更简单的界面 - 例如, SendTo(用户,消息)。然后您需要编写适合XMPP服务器角色的适配器。这件事将处理与您选择的XMPPServer相关的所有怪癖。

这个更简单的界面更容易模拟和弹性改变。 HTH