【发布时间】:2021-04-18 15:56:19
【问题描述】:
我正在尝试测试一些api调用函数:
Future<SomeType> getType(int id) async {
String token = await retrieveToken();
String api = await getApiEndpoint();
final response = await client.get("$api/something/$id", headers: { "Authorization": "Bearer $token"});
if (response.statusCode == 200) {
String body = utf8.decode(response.bodyBytes);
return SomeType.fromJson(json.decode(body));
} else {
throw Exception('Failed to load some types from API');
}
}
两个功能:
retrieveToken();
getApiEndpoint();
内部调用的函数与 getType() 函数不是同一类的成员。它们还包含 在它们里面有 FlutterSecureStorage() 的实例。
我不需要测试这个函数,我只是想在getType函数的测试中模拟他们的反应。
我创建了以下测试示例:
class MockedApiEndpoint extends Mock implements ApiEndpoint {}
void main() {
WidgetsFlutterBinding.ensureInitialized();
test('returns SomeType', () async {
final typesRepository = TypesRepository();
final mockedApiEndpoint = MockedApiEndpoint();
when(mockedApiEndpoint.getApiEndpoint()).thenAnswer((_) async => Future.value("some_url.com"));
when(mockedApiEndpoint.retrieveToken()).thenAnswer((_) async => Future.value("some_token"));
typesRepository.client = MockClient( (request) async {
final mapJson = {'id' : 123};
return Response(json.encode(mapJson), 200);
});
final type = await typesRepository.getType(123);
expect(type.id, 123);
});
}
我能够成功模拟客户端 reposne,我也在尝试模拟这两个函数的响应,但我不断收到以下错误:
MissingPluginException(未找到在通道 plugins.it_nomads.com/flutter_secure_storage 上读取方法的实现)
我会非常感谢任何提示如何处理这个主题以及我在这个主题上做错了什么。我是 Flutter 单元测试的新手,我试图在网络上找到任何与我类似的问题,但不幸的是失败了。
【问题讨论】:
标签: flutter unit-testing dart testing mocking