颤振从单元\小部件测试调用http请求而不进行模拟

Posted

技术标签:

【中文标题】颤振从单元\\小部件测试调用http请求而不进行模拟【英文标题】:Flutter call http requests from a unit\widget test without mocking颤振从单元\小部件测试调用http请求而不进行模拟 【发布时间】:2020-07-07 11:11:43 【问题描述】:

我有一个遵循 MVC+服务架构的应用程序。服务层为 REST API 发出 http 请求。但是,http 请求的响应会间歇性地变化,这会导致我的模型发生变化,或者我的应用程序会随机崩溃。所以为了捕捉这些 API 的变化,我想编写一些自动化测试,它们可以准确地告诉我发生了什么变化。示例测试用例如下:

test("login_valid", () async 
    final loginData = LoginData(
      email: "abc@gmail.com",
      password: "123"
    );
    final parameters = loginData.toJson();

    var json = await httpService.post(parameters);
    var loginResponse = LoginResponse.fromJson(json);

    expect(loginResponse.status, "OK");
  );

但是,上面的代码在运行时会抛出SocketException。我知道当androidManifest.xml 中未提供INTERNET 权限时会引发此异常,但我不知道如何为单元\小部件测试设置此异常。

附:我无法使用mockit 或类似框架模拟服务层,因为重点是测试我的服务层,它没有任何业务逻辑,只提供网络集成。

任何解决方案或建议都会非常有帮助。如果有的话,我也可以使用其他方法来实现相同的意图。

【问题讨论】:

你能分享堆栈跟踪吗? 【参考方案1】:

检查这里或那里指出的 gihub 问题讨论 https://timm.preetz.name/articles/http-request-flutter-test

【讨论】:

太棒了。很高兴看到这一点,还有其他人也想要同样的东西 我测试了完全相同的代码。复制粘贴。颤振 2.0.0.它不起作用。为什么 Flutter 团队不允许在测试中使用 HTTP 请求或一般只允许真正的异步代码? 这在你不处理后端代码的时候特别有用,你可以及早发现问题:)

以上是关于颤振从单元\小部件测试调用http请求而不进行模拟的主要内容,如果未能解决你的问题,请参考以下文章

在颤振测试中模拟悬停

在调试模式下在颤振上显示特定的小部件

如何在颤振小部件测试中捕获来自未来的错误?

模拟请求和结果以进行最小的单元测试

如何在颤振集成测试中模拟 http 请求?

选择不依赖于状态的正确颤振块小部件