Flutter 从 unit\widget 测试中调用 http 请求而不进行模拟
Flutter call http requests from a unit\widget test without mocking
我有一个遵循 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
权限时会抛出这个异常,但我不知道如何为 unit\widget 测试设置这个。
P.S。我不能使用 mockit
或类似的框架来模拟服务层,因为重点是测试我的服务层,它没有任何业务逻辑,只提供网络集成。
任何解决方案或建议都会很有帮助。如果有的话,我也可以使用其他方法来实现相同的目的。
检查这个或那里的 gihub 问题讨论
https://timm.preetz.name/articles/http-request-flutter-test
我有一个遵循 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
权限时会抛出这个异常,但我不知道如何为 unit\widget 测试设置这个。
P.S。我不能使用 mockit
或类似的框架来模拟服务层,因为重点是测试我的服务层,它没有任何业务逻辑,只提供网络集成。
任何解决方案或建议都会很有帮助。如果有的话,我也可以使用其他方法来实现相同的目的。
检查这个或那里的 gihub 问题讨论 https://timm.preetz.name/articles/http-request-flutter-test