我正在尝试针对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。
知道我在做什么错吗?
谢谢