【问题标题】:How to mock a "server - android device" communication如何模拟“服务器 - 安卓设备”通信
【发布时间】:2011-06-22 18:14:44
【问题描述】:

我在 Android 上有一个通过套接字与服务器通信的应用程序。我还实现了协议缓冲区类型的消息,以获取有关通信的更多信息。

我还没有在服务器上实现响应 android 客户端请求的所有逻辑。因此,我无法在客户端测试我发送请求时会发生什么。我可以用什么来帮助我测试这个?是否有一种(简单的)创建模拟服务器的方法来模拟响应?

有人告诉我要阅读有关 Junit 的一些内容以及这里的一些内容:http://developer.android.com/guide/topics/testing/testing_android.html 但不确定这是正确的道路..

谢谢

编辑1

对不起,写这个话题时很着急。 感谢您的所有回答,但我认为我的情况有点不同。 通信协议是 TCP,消息属于“协议缓冲区”类型,而不是 XML 或 JSON。所以 Maque 看起来很酷,但在这里不可行。 此外,服务器端是在 C# 上开发的,而不是 Java。

再次感谢您

【问题讨论】:

    标签: java android junit mocking


    【解决方案1】:

    如果您的服务器也使用 Java(Servlets/JSP),您可以共享消息处理逻辑并在其上定义一些单元测试。

    【讨论】:

      【解决方案2】:

      我们在开发过程中不得不解决类似的问题。您有多种选择 - 这取决于您的情况以及您想要测试的具体内容。

      在我们的一些测试中,我们使用了一个运行在主机上的非常简单的 HTTP 服务器(我们的协议在 HTTP 之上运行),它配置了对某些请求的预设响应。我们使用 Python 的 SimpleHTTPServer 类编写它。这种方法的好处是您正在执行完整的端到端测试,包括 Android 网络堆栈。缺点是设置起来很麻烦(我们有一个在开发机器上运行的测试工具,启动服务器,在模拟器或设备上运行测试并收集结果)。

      如果您想模拟设备本身的低级代码,请查看 Borachio 进行模拟,查看 RoboGuice 进行依赖注入。有一个完整的示例说明如何做到这一点here

      最后,您也许可以使用Robolectric 并在您的开发机器上运行您的测试。缺点是您的测试不会在 Android 设备本身上运行,并且很难有效地测试您的代码和操作系统之间的交互。

      【讨论】:

        【解决方案3】:

        如果您使用 HTTP 作为您的套接字/服务器协议,那么您可能需要查看一个名为 Maque 的新应用程序。它旨在帮助测试和开发 HTTP 和数据驱动的应用程序。它有一个内置的 HTTP 1.1 服务器,并提供一个 UI,让您无需编写代码或部署服务器堆栈即可创建 API 和测试请求。

        如果您像 Paul 一样运行自动化测试,那么您可能会面临一些相同的挑战,即启动应用程序,然后运行应用程序,然后将其关闭,但对于开发和常规测试,它应该能够满足您的需求。

        您可以在此处获取跨平台(OS X、Windows、Linux)测试版:http://maqueapp.com/getBeta.html

        【讨论】:

          【解决方案4】:

          查看 Square 的 MockWebServer,现在是 OkHttp 的一部分。

          【讨论】:

            猜你喜欢
            • 2012-04-01
            • 1970-01-01
            • 1970-01-01
            • 2020-01-01
            • 2015-07-13
            • 1970-01-01
            • 2014-11-02
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多