我正在尝试使用Mockito来实现这一点,这是我的测试:
import 'package:http/http.dart' as http;
import 'package:utgard/globals.dart' as globals;
import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';
import 'package:mockito/mockito.dart';
class MockClient extends Mock implements http.Client {}
void main() {
group('Login flow', () {
final SerializableFinder loginContinuePasswordButton =
find.byValueKey('login_continue_password_button');
FlutterDriver driver;
setUpAll(() async {
driver = await FlutterDriver.connect();
});
tearDownAll(() async {
if (driver != null) {
//await driver.close();
}
});
test('login with correct password', () async {
final client = MockClient();
when(client.post('http://wwww.google.com'))
.thenAnswer((_) async => http.Response('{"title": "Test"}', 200));
globals.httpClient = client;
await driver.enterText('000000');
await driver.tap(loginContinuePasswordButton);
});
});
}
这是我的http请求代码:
Future<Map<String, dynamic>> post({
RequestType requestType,
Map<String, dynamic> body,
}) async {
final http.Response response =
await globals.httpClient.post('http://wwww.google.com');
print(response);
final Map<String, dynamic> finalResponse = buildResponse(response);
_managerErrors(finalResponse);
return finalResponse;
}
这是全局的:
library utgard.globals;
import 'package:http/http.dart' as http;
http.Client httpClient = http.Client();
然而,我继续收到http错误,这表明http没有被mock替换。
3条答案
按热度按时间gdx19jrr1#
我找到的解决方案是在 test_driver/app.dart 中定义mock,然后调用
runApp
函数:pepwfjgg2#
而不是
尝试
any
,然后稍后Assert它有一个小的机会,调用参数是不完全是你嘲笑,所以去与
any
是安全的。lo8azlld3#
我们看不到您正在测试的代码,但它不太可能发出此请求:
无论如何,使用mock json文件是一个很好的实践,并且您不希望在mock文件更改时更改请求。
我建议您使用Mocktail,而不要使用Mockito。
这样,您就可以使用
any
模拟任何调用:以下是完整的解决方案: