在dart测试中(Flutter),注入的依赖关系为null

时间:2019-02-25 19:09:23

标签: dart flutter mockito

我正在尝试针对Flutter项目在dart中对一个类进行单元测试,并且按照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 {
    ...
  }
}

看看我如何在IdentityProvider的构造函数中注入HttpProvider实例。

这工作正常,但是现在我想创建一个单元测试,所以我这样做了:

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不为null,但是当我输入IdentityProvider的构造函数时,引用为null。

知道我在做什么错吗?

谢谢

0 个答案:

没有答案