2016-10-15 51 views
1

我想为我的Codename One应用程序编写功能测试。如何在Codename One中模拟服务器/ http请求进行测试?

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

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

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

是否有可能在启动应用程序之前模拟ConnectionRequest或做相同的事情?

+0

我们在Codename One中没有类似的东西。尽管如此,你也许可以破解一些JavaSE模拟框架来与模拟器一起工作。 –

回答

0

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

  1. 写称为HTTPRequestInterface一个接口,它暴露了neccessary方法来构造一个HTTP查询
  2. 创建一个名为的HTTPRequestInterface实现说HTTPRequest,这仅仅是围绕ConnectionRequest包装
  3. 创建HTTPRequests的创建一个类,比如HTTPRequestFactory,它有一个叫做create的静态方法和一个叫做setMock的方法。如果没有设置模拟,并且在设置了模拟的情况下指定的模拟,则该类创建正常的HTTPRequest
  4. 替换所有ConnectionRequestHTTPRequestFactory.create()
  5. 创建一个类InitialSetup,它有两个方法:setInitialization,它接受一个Runnable来执行,init方法,刚刚运行Runnable
  6. 在启动方法中,调用InitialSetup.init
  7. 现在在测试中,在prepare方法中,我可以设置所需的模拟,而不运行自动化测试的应用程序将查询发送到实际的服务器。

需要一些努力,但自动测试与嘲笑后端带来的信心,我认为是绝对值得的!

1

您可以将嘲笑的设备慢速连接或关闭它完全模拟没有互联网连接模拟器减慢连接。在您的模拟器中找到模拟 - >网络中的选项。将此设置更改为Slow connectionDisconnected,然后重新运行您的应用。

指向一个错误的URL来模拟404错误。

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

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

+0

感谢您的回答!但在这种情况下,我想要的是,服务器端点可能返回两个可能的响应,我想测试该应用程序是否适合每个响应。由于功能测试是自动化的,我无法在服务器中硬编码响应。我在Angular中寻找类似https://docs.angularjs.org/api/ngMock/service/$httpBackend 的东西,基本上你会告诉:“对于这个自动化测试,期待这个HTTP请求,并用这个HTTP响应做出响应” 。经过一番调查,我认为这在代号1中是不可能的。 –

相关问题