// deviceId 是这个壳工程里唯一有合规约束的一段逻辑,所以它有测试: // 它必须是**本端随机生成**的,不能是任何设备唯一标识(IMEI / IDFA / MAC / // AndroidID)。这条断言防的不是今天的代码,是将来某个人为了"提高准确率" // 把它换成 device_info_plus 的某个字段。 import 'package:app/src/device_id.dart'; import 'package:core_storage/core_storage.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart'; import 'package:shared_preferences_platform_interface/shared_preferences_async_platform_interface.dart'; void main() { setUp(() { SharedPreferencesAsyncPlatform.instance = InMemorySharedPreferencesAsync.empty(); }); test('首次调用生成并落盘,之后一直复用同一个值', () async { final Prefs prefs = Prefs(); final String first = await loadOrCreateDeviceId(prefs); expect(first, isNotEmpty); // 换一个 Prefs 实例读,模拟下次冷启动。 final String second = await loadOrCreateDeviceId(Prefs()); expect(second, first); }); test('两台设备(两份存储)拿到的是不同的随机值', () async { final String a = await loadOrCreateDeviceId(Prefs()); SharedPreferencesAsyncPlatform.instance = InMemorySharedPreferencesAsync.empty(); final String b = await loadOrCreateDeviceId(Prefs()); // 撞了就说明它不是随机的——大概率是有人换成了设备标识。 expect(b, isNot(a)); // 128 bit 的 base64url,去掉 padding 后 22 个字符。 expect(a.length, 22); expect(a, isNot(contains('='))); }); }