如何测试依赖 Flutter 服务的服务

时间:2021-03-29 07:00:16

标签: flutter unit-testing dart

我创建了一个自定义语言服务来促进我的 Flutter 应用程序中的本地化。

这些是文件:

文件 1:language_service.dart

import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:injectable/injectable.dart';
import 'package:stacked/stacked.dart';
import 'language_type.dart';
import 'models/app_strings.dart';

@singleton
class LanguageService extends BaseViewModel {
  late LanguageType _currentLanguage;
  late AppStrings _appStrings;

  LanguageType? get currentLanguage => _currentLanguage;
  AppStrings get strings => _appStrings;

  Future<void> switchLanguage(LanguageType languageType) async {
    _currentLanguage = languageType;

    var parsedJson = await getJsonFromLanguage(languageType.toString());

    _appStrings = AppStrings.fromJson(parsedJson);

    notifyListeners();
  }

  Future<Map<String, dynamic>> getJsonFromLanguage(String language) async {
    String jsonString = await rootBundle
        .loadString('lib/localization/languages/$language.json');
    return json.decode(jsonString);
  }
}

文件 2:app_strings.dart

import 'home_page_strings.dart';

class AppStrings {
  final HomePageStrings homePage;

  AppStrings.fromJson(Map<String, dynamic> parsedJson)
      : homePage = HomePageStrings.fromJson(
          parsedJson['HomePageStrings'],
        );
}

文件 3:home_page_strings.dart

class HomePageStrings {
  final String title;

  HomePageStrings({required this.title});

  HomePageStrings.fromJson(Map<String, dynamic> json) : title = json['title'];
}

文件 4:language_type.dart

class LanguageTypes {
  static LanguageType english = LanguageType("en");
  static LanguageType nepali = LanguageType("np");
}

class LanguageType {
  static List<String> supportedLanguages = ['en', 'np'];
  static String defaultLanguage = 'en';

  String language;

  LanguageType(this.language) : assert(supportedLanguages.contains(language));

  @override
  String toString() {
    return language;
  }
}

我需要测试 language_service 但它依赖于 rootBundle。如何使用 Mockito 在 Flutter 2 中对此进行测试?

0 个答案:

没有答案