我想对 api 进行单元测试,我按照 本教程 来实现它,但我得到了一个荒谬的错误。
我一整天都在为这个问题苦苦挣扎!
这里是解释:我的项目中需要有
mokito
和 api_client.g
文件。
每当我尝试使用此命令生成 mokito 文件时
flutter packages pub run build_runner build --delete-conflicting-outputs
都会生成 mokito 类,但我的 api_client.g.dart
消失并且不会重新生成。
我曾经能够使用以下命令生成
api_client.g.dart
文件:
flutter pub run build_runner build
我的 pubspec.yaml
name: app_store
description: A new Flutter project.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1
environment:
sdk: ">=2.15.1 <3.0.0"
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
flutter_riverpod: ^1.0.3
cupertino_icons: ^1.0.2
shared_preferences: ^2.0.13
built_value: ^8.1.4
json_annotation: ^4.4.0
dio: ^4.0.4
package_info_plus: ^1.4.2
cached_network_image: ^3.2.0
url_launcher: ^6.0.18
intl: ^0.17.0
flutter_svg: ^1.0.3
lottie: ^1.2.1
pin_code_fields: ^7.3.0
image_cropper: ^2.0.3
image_picker: ^0.8.5+3
file_picker: ^4.6.1
device_info_plus: ^4.0.0
disk_space: ^0.2.1
flutter_rating_bar: ^4.0.1
device_apps: ^2.2.0
path_provider: 2.0.9
speech_to_text: ^5.6.0
app_installer: ^1.1.0
downloads_path_provider_28: ^0.1.2
permission_handler: ^8.3.0
mockito: ^5.3.1
build_runner: ^2.2.1
# freezed: ^2.0.3
http: ^0.13.4
flutter_lints: ^1.0.0
json_serializable: ^6.1.4
uni_links: ^0.5.1
dev_dependencies:
integration_test:
sdk: flutter
flutter_test:
sdk: flutter
flutter:
uses-material-design: true
generate: true
assets:
- assets/icons/
- assets/images/
- assets/animations/
fonts:
- family: iran_sans_x
fonts:
- asset: assets/fonts/iran_sans_x_ultra_light.otf
weight: 100
- asset: assets/fonts/iran_sans_x_thin.otf
weight: 200
- asset: assets/fonts/iran_sans_x_light.otf
weight: 300
- asset: assets/fonts/iran_sans_x_regular.otf
weight: 400
- asset: assets/fonts/iran_sans_x_medium.otf
weight: 500
- asset: assets/fonts/iran_sans_x_semi_bold.otf
weight: 600
- asset: assets/fonts/iran_sans_x_bold.otf
weight: 700
- asset: assets/fonts/iran_sans_x_extra_bold.otf
weight: 800
- asset: assets/fonts/iran_sans_x_black.otf
weight: 900
- family: DanaFaNum
fonts:
- asset: assets/fonts/DanaFaNum-UltraLight.ttf
weight: 100
- asset: assets/fonts/DanaFaNum-Thin.ttf
weight: 200
- asset: assets/fonts/DanaFaNum-Light.ttf
weight: 300
- asset: assets/fonts/DanaFaNum-Regular.ttf
weight: 400
- asset: assets/fonts/DanaFaNum-Medium.ttf
weight: 500
- asset: assets/fonts/DanaFaNum-Bold.ttf
weight: 600
- asset: assets/fonts/DanaFaNum-DemiBold.ttf
weight: 700
- asset: assets/fonts/DanaFaNum-ExtraBold.ttf
weight: 800
- asset: assets/fonts/DanaFaNum-Black.ttf
weight: 900
我的 Mokito 课程:
import 'package:app_store/data/model/responseModel/login_with_mobile_rm.dart';
import 'package:app_store/main.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:http/http.dart' as http;
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'api_test.mocks.dart';
final httpProvider = Provider<http.Client>((ref) {
return http.Client();
});
@GenerateMocks([http.Client])
void main() {
testWidgets('200 response increments', (WidgetTester tester) async {
final client = MockClient();
when(client.get(Uri.parse('https://httpstat.us/200'))).thenAnswer(
(value) async {
return http.Response(LoginWithMobileRm().toJson().toString(), 200);
},
);
await tester.pumpWidget(
ProviderScope(
overrides: [
httpProvider.overrideWithValue(client),
],
child: const MyApp(),
),
);
expect(1, 1);
});
}
我的api_client:
part 'api_client.g.dart';
abstract class ApiClient {
factory ApiClient(Dio dio, AppPreferencesHelper appPreferencesHelper,
{required String baseUrl}) = _ApiClient;
Future<BaseResponseModel<LoginWithMobileRm>> mobileLogin(
Map<String, String> map,
BuildContext context,
);
解决方案: 我已经尝试了上述所有建议,包括清理缓存和重新启动,但没有任何帮助。
只有这个有效:
- 在 dev_dependency 下添加“hive_generator”包
然后添加
您想要生成的每个模型/文件上的“filename.g.dart”部分 适配器。
然后运行这两个命令:
- dart 运行 build_runner clean
- dart 运行 build_runner 构建
然后繁荣,一切都生成并且工作正常。