如何做单元测试在扑动,Mockito当我们做一个post请求使用Dio包?



Dio请求登录认证

Future<String?> authentication(String mobileNumber, String password, Dio dio) async {
dynamic data = {
"username": mobileNumber,
"password": password,
"grant_type": "password",
"client_id": "client_id"
};
try {
final response = await _dio.post(baseurl,
data: data,
options: Options(headers: {
"Content-Type": "application/x-www-form-urlencoded"
})); //'Authorization': 'Bearer $token
if (response.statusCode == 200) {
accessToken = response.data["access_token"];
refreshToken = response.data["refresh_token"];
Fluttertoast.showToast(msg: "Successfully Logged in");
return accessToken;
}
}on DioError catch (e) {
Fluttertoast.showToast(msg: "Something went wrong");
return e.toString();
}
return accessToken;
}

**单元测试**


MockDio mockDio = MockDio();
test("if authentication successfull token will return  ", () async {

when(mockDio.post(Apiservices().baseurl)).thenAnswer((_)async =>*need return a response????*
);
expect(await service.authentication("username", "password", mockDio),
isA<String>());
});

我需要检查登录验证测试使用dio和mockit包。它将返回一个令牌。我不会嘲笑你。

请给出详细的例子。或者给我一些参考

试试这样:

test(
'Given: Fake login request with username and password,'
'When: Mock login API,'
'Then: Successful response from mock api', () async {
// arrange
when(
mockDio.post(
Apiservices().baseurl
),
).thenAnswer((realInvocation) async {
return Response(jsonEncode(loginSuccessResponse), 200); //this will create  a response for your api request
});
// act, this will return a fake api response, we created above
final resp = await _networkCallMock.post(
Apiservices().baseurl
);
// assert, actualResponse we mocked to get from api call, have a actual  
// response as expectedResponse, and compare it.
final actualResponse = LoginResponse.fromJson(jsonDecode(resp.body));
final expectedResponse = LoginResponse.fromJson(loginSuccessResponse);
expect(
actualResponse,
expectedResponse,
);
});

最新更新