Введенная зависимость является нулевой в тесте в дротике (Flutter) - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь выполнить модульное тестирование класса в 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, ссылка становится пустой.

Есть идеи, что я делаю неправильно?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...