如何在代号一中模拟服务器/http 请求进行测试?
How to mock server / http requests in Codename One for testing?
我想为我的代号 One 应用程序编写功能测试。
为此,我需要能够模拟一些服务器响应,以便它们 return 正是我在特定测试中所需要的。
我尝试让发送 HTTP 请求的函数将 ConnectionRequest 作为参数,这样我就可以注入一些东西来模拟网络延迟,然后使用模拟响应调用回调。
但是,当我尝试在单元测试的 prepare 方法中注入 ConnectionRequest 的模拟时,它们仍然在应用程序启动后注入,这对我的情况不起作用,因为我发送了 HTTP 请求应用程序启动。
是否可以在启动应用程序之前模拟 ConnectionRequest 或做一些等效的事情?
您可以在模拟器中降低连接速度,这将模拟设备上的连接速度变慢,或者完全关闭它以模拟无互联网连接 .在 Simulate -> Network 下找到模拟器中的选项。将此设置更改为 Slow connection
或 Disconnected
并重新 运行 您的应用。
指向一个错误URL模拟404错误
Return 模拟 IOException 或 NullPointer 异常的服务器端代码无法读取数据。
执行此操作时,请确保您的网络监视器可见。您想要的大多数其他响应都可以在您的服务器端完成。
这是我最后做的。如果有人需要自动化测试的解决方法,我会发布这个。
- 编写一个名为
HTTPRequestInterface
的接口,它公开构建 HTTP 查询的必要方法
- 创建一个名为 say
HTTPRequest
的 HTTPRequestInterface
实现,它只是 ConnectionRequest 的包装器
- 创建一个 class 用于创建 HTTPRequest,比如
HTTPRequestFactory
,它有一个名为 create
的静态方法和一个名为 setMock
的方法。这 class 创建一个正常的 HTTPRequest
以防未设置模拟,并创建指定的模拟以防设置了模拟。
- 将所有
ConnectionRequest
替换为 HTTPRequestFactory.create()
- 创建一个class
InitialSetup
,它有两个方法:setInitialization
,它接受一个Runnable
来执行,和init
方法,它只运行 Runnable
.
- 在启动方法中,调用
InitialSetup.init
- 现在在测试中,在 prepare 方法中,我可以设置所需的 mock,应用程序在没有 运行 自动化测试时会向实际服务器发送查询。
需要付出一些努力,但是带有模拟后端的自动化测试带来了我认为绝对值得的信心!
我想为我的代号 One 应用程序编写功能测试。
为此,我需要能够模拟一些服务器响应,以便它们 return 正是我在特定测试中所需要的。
我尝试让发送 HTTP 请求的函数将 ConnectionRequest 作为参数,这样我就可以注入一些东西来模拟网络延迟,然后使用模拟响应调用回调。
但是,当我尝试在单元测试的 prepare 方法中注入 ConnectionRequest 的模拟时,它们仍然在应用程序启动后注入,这对我的情况不起作用,因为我发送了 HTTP 请求应用程序启动。
是否可以在启动应用程序之前模拟 ConnectionRequest 或做一些等效的事情?
您可以在模拟器中降低连接速度,这将模拟设备上的连接速度变慢,或者完全关闭它以模拟无互联网连接 .在 Simulate -> Network 下找到模拟器中的选项。将此设置更改为 Slow connection
或 Disconnected
并重新 运行 您的应用。
指向一个错误URL模拟404错误
Return 模拟 IOException 或 NullPointer 异常的服务器端代码无法读取数据。
执行此操作时,请确保您的网络监视器可见。您想要的大多数其他响应都可以在您的服务器端完成。
这是我最后做的。如果有人需要自动化测试的解决方法,我会发布这个。
- 编写一个名为
HTTPRequestInterface
的接口,它公开构建 HTTP 查询的必要方法 - 创建一个名为 say
HTTPRequest
的HTTPRequestInterface
实现,它只是 ConnectionRequest 的包装器
- 创建一个 class 用于创建 HTTPRequest,比如
HTTPRequestFactory
,它有一个名为create
的静态方法和一个名为setMock
的方法。这 class 创建一个正常的HTTPRequest
以防未设置模拟,并创建指定的模拟以防设置了模拟。 - 将所有
ConnectionRequest
替换为HTTPRequestFactory.create()
- 创建一个class
InitialSetup
,它有两个方法:setInitialization
,它接受一个Runnable
来执行,和init
方法,它只运行Runnable
. - 在启动方法中,调用
InitialSetup.init
- 现在在测试中,在 prepare 方法中,我可以设置所需的 mock,应用程序在没有 运行 自动化测试时会向实际服务器发送查询。
需要付出一些努力,但是带有模拟后端的自动化测试带来了我认为绝对值得的信心!