#flutter #unit-testing #mockito #flutter-test #flutter-mockito
Вопрос:
Эй, в рамках проекта я хотел бы протестировать свои классы, как показано ниже, но у меня есть небольшая проблема. Мне невозможно проверить, я всегда сталкиваюсь с одними и теми же ошибками «тип» Null «не является подтипом типа» Будущееlt;OAuthToken?gt; «» или «Оператор проверки Null, используемый для нулевого значения». Например :
class Authentication { final FlutterSecureStorage _secureStorage = const FlutterSecureStorage(); static const String BEARER_TOKEN = 'BEARER_TOKEN'; Futurelt;OAuthTokengt; setToken(OAuthTokenResponse token) async { assert(token.accessToken != null, 'A non null token is required'); final String jsonToken = json.encode(token.toJson()); await _secureStorage.write(key: BEARER_TOKEN, value: jsonToken); return token; } Futurelt; OAuthToken?gt; getToken() async { final String? jsonToken = await _secureStorage.read(key: BEARER_TOKEN); if (jsonToken == null) { return null; } return OAuthToken(json.decode(jsonToken)); } Futurelt;voidgt; deleteToken() async { await _secureStorage.delete(key: BEARER_TOKEN); } }
Мое модульное тестирование :
void main() { final Authentication dataSource = Authentication(); final MockFlutterSecureStorage mockSecureStorage = MockFlutterSecureStorage(); final token = OAuthToken.fromJson(json.decode(fixture('oauth_token_response.json'))); group('getToken', () { test('should return OAuthToken from FlutterSecureStorage when there is one the saved', () async { // arrange when(() =gt; mockSecureStorage.read(key: BEARER_TOKEN)).thenAnswer((_) async =gt; fixture('oauth_token_response.json')); // act final result = await dataSource.getToken(); //assert verify(() =gt; mockSecureStorage.read(key: BEARER_TOKEN)); expect(result, equals(token)); }); test('should return null when is not saved token', () async { // arrange when(() =gt; mockSecureStorage.read(key: BEARER_TOKEN)).thenAnswer((_) async =gt; null); // act final result = await dataSource.getToken(); //assert expect(result, equals(null)); }); }); group('saveToken', () { test('should call FlutterSecureStorage to save token', () async { // arrange when(() =gt; mockSecureStorage.write(key: BEARER_TOKEN, value: json.encode(token))).thenAnswer((invocation) =gt; Futurelt;voidgt;.value()); //act await dataSource.setToken(token); // assert final expectedJsonString = json.encode(token.toJson()); verify(() =gt; mockSecureStorage.write(key: BEARER_TOKEN, value: expectedJsonString)); }); }); }
Я попробовал Коктейль и Мокито, и у меня та же ошибка… Может быть, проблема с моком ?
Спасибо