如何在Codename One中模拟服务器/ http请求进行测试?

时间:2016-10-15 10:05:32

标签: testing codenameone functional-testing

我想为我的Codename One应用编写功能测试。

要做到这一点,我需要能够模拟一些服务器响应,以便它们返回我所需的特定测试。

我尝试使用发送HTTP请求的函数的一件事是将ConnectionRequest作为参数,这样我可以注入一些东西来模拟网络延迟,然后使用模拟的响应调用回调。

然而,当我尝试在单元测试的prepare方法中注入ConnectionRequest的模拟时,它们仍然在应用程序启动后注入,这对我的情况不起作用,因为我在开始时发送了HTTP请求应用程序。

是否可以在启动应用程序之前模拟ConnectionRequest或执行等效操作?

2 个答案:

答案 0 :(得分:1)

您可以降低模拟器中的连接速度,这将模拟设备上的慢速连接或完全关闭它以模拟无互联网连接。在模拟 - >下找到模拟器中的选项网络即可。将此设置更改为Slow connectionDisconnected,然后重新运行您的应用。

指向错误的网址以模拟404错误。

从服务器端代码返回不可读的数据,以模拟IOException或NullPointer异常。

执行此操作时,请确保您的网络监视器可见。您想要的大多数其他响应都可以在服务器端完成。

答案 1 :(得分:0)

这是我最终做的事情。如果有人需要自动化测试的解决方法,我会发布此信息。

  1. 编写一个名为HTTPRequestInterface的接口,该接口公开构建HTTP查询的必要方法
  2. 创建名为HTTPRequestInterface的{​​{1}}实现,它只是ConnectionRequest的包装
  3. 创建一个用于创建HTTPRequests的类,比如HTTPRequest,它有一个名为HTTPRequestFactory的静态方法和一个名为create的方法。如果没有设置mock,则此类创建一个普通的setMock,如果设置了mock,则创建指定的mock。
  4. 将所有HTTPRequest替换为ConnectionRequest
  5. 创建一个类HTTPRequestFactory.create(),它有两个方法:InitialSetup,它接受​​要执行的setInitialization,以及Runnable方法,它只运行{{1} }}。
  6. 在开始方法中,请致电init
  7. 现在在测试中,在prepare方法中,我可以设置所需的模拟,当不运行自动化测试时,应用程序会向实际服务器发送查询。
  8. 需要一些努力,但使用模拟后端的自动化测试带来了我认为绝对值得的信心!