Я пытаюсь выполнить модульное тестирование класса в dart для проекта Flutter, и я использую mockito, как рекомендовано в https://flutter.dev/docs/cookbook/testing/unit/mocking.
. Я тестирую IdentityProvider, который выполняет http-вызовы послебэкэндВнутренне этот провайдер использует HttpProvider, который я использую для централизации всех http-вызовов;таким образом я могу иметь дело с заголовками аутентификации и ошибками в одном месте.
Это код для HttpProvider.
class HttpProvider {
final Map<String, String> _headers = {
'Content-type': 'application/json',
};
IOClient _ioClient;
HttpProvider() {
// need to use a custom IOClient because of the selfsigned certificates
HttpClient httpClient = HttpClient()
..badCertificateCallback =
((X509Certificate cert, String host, int port) => true);
_ioClient = IOClient(httpClient);
}
Future<Response> post(String url,
{Map<String, String> headers, dynamic body}) {
return _ioClient.post(url, headers: headers ?? _headers, body: body);
}
}
И это мой (упрощенный) код для IdentityProvider:
class IdentityProvider {
final HttpProvider http;
IdentityProvider(this.http);
Future<Identity> create() async {
...
}
}
Посмотрите, как я внедряю экземпляр HttpProvider в конструктор для IdentityProvider.
Это работает нормально, но теперь я хочу создать модульный тест, и поэтому я сделалthis:
class MockHttpProvider extends Mock implements HttpProvider {}
void main() {
test('create returns an Identity if there are no errors', () async {
final http = MockHttpProvider();
final sut = IdentityProvider(http);
...
});
}
Итак, проблема в том, что мой тест не пройден.Если я отлаживаю его, http не является нулевым внутри тестового файла, но когда я вхожу в конструктор для IdentityProvider, ссылка становится пустой.
Есть идеи, что я делаю неправильно?
Спасибо