mogol / flutter_secure_storage

A Flutter plugin to store data in secure storage
https://pub.dartlang.org/packages/flutter_secure_storage
BSD 3-Clause "New" or "Revised" License
1.13k stars 374 forks source link

Not working with Mockito #608

Closed fnemethy closed 2 months ago

fnemethy commented 1 year ago

Hi All,

I have a problem with Flutter Secure Storage unit testing. If I mocked it with Mockito, I got this error:

package:test_core/src/runner/vm/platform.dart 252:7 VMPlatform._compileToKernel ===== asynchronous gap =========================== package:test_core/src/runner/vm/platform.dart 231:13 VMPlatform._spawnIsolate ===== asynchronous gap =========================== package:test_core/src/runner/vm/platform.dart 76:19 VMPlatform.load ===== asynchronous gap =========================== package:test_core/src/runner/loader.dart 227:27 Loader.loadFile. ===== asynchronous gap =========================== package:test_core/src/runner/load_suite.dart 98:19 new LoadSuite..

Failed to load "/Users/mbp37/Projects/new/****/packages/user_repository/test/user_repository_test.dart": ../../../../../../development/flutter/packages/flutter/lib/src/foundation/debug.dart:5:8: Error: Dart library 'dart:ui' is not available on this platform. import 'dart:ui' as ui show Brightness;

. ... ..

package:user_repository/src/user_secure_storage.dart => package:flutter_secure_storage/flutter_secure_storage.dart => package:flutter/foundation.dart => package:flutter/src/foundation/memory_allocations.dart => package:flutter/src/foundation/assertions.dart => package:flutter/src/foundation/diagnostics.dart => package:flutter/src/foundation/debug.dart => dart:ui

The test:

import 'package:mockito/annotations.dart'; import 'package:mockito/mockito.dart'; import 'package:test/test.dart'; import 'package:remote_api/remote_api.dart'; import 'package:user_repository/src/user_secure_storage.dart'; import 'package:user_repository/user_repository.dart';

import 'user_repository_test.mocks.dart';

@GenerateMocks([UserSecureStorage, RemoteApi]) void main() { final _userSecureStorage = MockUserSecureStorage(); final _remoteApi = MockRemoteApi(); final _userRepository = UserRepository( remoteApi: _remoteApi, secureStorage: _userSecureStorage, );

group('User authentication token:', () { test( 'When calling getUserToken after successful authentication, return authentication token', () async { final String token = 'token';

  when(_userSecureStorage.getUserToken()).thenAnswer((_) async => token);

  expect(await _userRepository.getUserToken(), token);
});

}); }

I use the latest 9.0.0 version with this dev dependecies: dev_dependencies: mockito: ^5.4.2 test: ^1.24.6 build_runner: ^2.4.6

codelovercc commented 9 months ago

Don't use Mockito or Mocktail since it has FlutterSecureStorage.setMockInitialValues https://github.com/mogol/flutter_secure_storage/issues/471

juliansteenbakker commented 2 months ago

I am closing all older issues. If this issue still exists in the latest version, please let me know.