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

Testing 如何在Codename One中模拟服务器/http请求以进行测试?,testing,codenameone,functional-testing,Testing,Codenameone,Functional Testing,我想为我的代号为One的应用程序编写功能测试 要做到这一点,我需要能够模拟一些服务器响应,以便它们准确地返回特定测试所需的内容 我试图让发送HTTP请求的函数将ConnectionRequest作为参数,这样我可以注入一些东西来模拟网络延迟,然后用模拟响应调用回调 但是,当我尝试在单元测试的prepare方法中注入ConnectionRequest的mock时,它们仍然在应用程序启动后被注入,这对我的情况不起作用,因为我在应用程序启动时发送了HTTP请求 是否可以在启动应用程序之前模拟Conne

我想为我的代号为One的应用程序编写功能测试

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

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

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


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

您可以在模拟器中减慢连接速度,这将模拟设备上的慢速连接,或完全关闭连接以模拟没有internet连接。在模拟器中的模拟->网络下找到选项。将此设置更改为
慢速连接
断开连接
,然后重新运行应用程序

指向错误的URL以模拟404错误

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


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

以下是我最后要做的。如果有人需要一个自动测试的解决方案,我会发布这个帖子

  • 编写一个名为
    HTTPRequestInterface
    的接口,它公开了构造HTTP查询所需的方法
  • 创建一个名为say
    HTTPRequest
    HTTPRequest接口的实现,它只是连接请求的包装器
  • 创建一个用于创建HTTPRequests的类,比如说
    HTTPRequestFactory
    ,它有一个名为
    Create
    的静态方法和一个名为
    setMock
    的方法。如果未设置mock,该类将创建一个普通的
    HTTPRequest
    ,如果设置了mock,则创建指定的mock
  • 将所有
    ConnectionRequest
    替换为
    HTTPRequestFactory.create()
  • 创建一个类
    InitialSetup
    ,它有两个方法:
    setInitialization
    ,它接受要执行的
    Runnable
    ,和
    init
    方法,它只运行
    Runnable
  • 在start方法中,调用
    InitialSetup.init
  • 现在,在测试中,在prepare方法中,我可以设置所需的mock,并且应用程序在不运行自动测试时将向实际服务器发送查询

  • 需要一些努力,但模拟后端的自动化测试带来了信心,我认为这绝对值得

    谢谢你的回答!但在这种情况下,我想要的是,例如,一个服务器端点可能会返回两个可能的响应,我想测试应用程序是否对每一个响应都能正常运行。由于功能测试是自动化的,所以我无法在服务器中硬编码响应。我正在寻找类似Angular的东西,基本上你会说:“对于这个自动化测试,期望这个HTTP请求,并用这个HTTP响应进行响应”。经过一些研究,我认为这在代号一中是不可能的。我们在代号一中没有类似的东西。不过,您可能能够破解一些JavaSE模拟框架来使用模拟器。