繁体   English   中英

Flutter安全存储单元测试

[英]Flutter secure storage unit test

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

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 并且我有同样的错误......可能是模拟问题?

谢谢

添加将安全存储 object 传递给Authentication()的选项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM