0

嘿,作为项目的一部分,我想像下面这样测试我的课程,但我有一个小问题。我无法测试,我总是遇到相同的错误“类型'Null'不是'Future<OAuthToken?>'类型的子类型”或“用于空值的空检查运算符”。例如 :

class Authentication {
  final FlutterSecureStorage _secureStorage = const FlutterSecureStorage();

  static const String BEARER_TOKEN = 'BEARER_TOKEN';

 Future<OAuthToken> 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;
 }

 Future< OAuthToken?> getToken() async {
  final String? jsonToken = await _secureStorage.read(key: BEARER_TOKEN);
  if (jsonToken == null) {
   return null;
  }
  return OAuthToken(json.decode(jsonToken));
 }

 Future<void> 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(() => mockSecureStorage.read(key: BEARER_TOKEN)).thenAnswer((_) async => fixture('oauth_token_response.json'));

   // act
   final result = await dataSource.getToken();

   //assert
   verify(() => mockSecureStorage.read(key: BEARER_TOKEN));
   expect(result, equals(token));
 });

 test('should return null when is not saved token', () async {
   // arrange
   when(() => mockSecureStorage.read(key: BEARER_TOKEN)).thenAnswer((_) async => null);

   // act
   final result = await dataSource.getToken();

   //assert
   expect(result, equals(null));
 });
});

group('saveToken', () {
 test('should call FlutterSecureStorage to save token', () async {
   // arrange
   when(() => mockSecureStorage.write(key: BEARER_TOKEN, value: json.encode(token))).thenAnswer((invocation) => Future<void>.value());

   //act
   await dataSource.setToken(token);

   // assert
   final expectedJsonString = json.encode(token.toJson());
   verify(() => mockSecureStorage.write(key: BEARER_TOKEN, value: expectedJsonString));
 });
});
}

我尝试了 Cocktail 和 Mockito,但我遇到了同样的错误......可能是 mock 的问题?

谢谢

4

0 回答 0