我使用shared_preferences来存储一些简单的数据。
当我尝试测试这个时,我遇到了一个问题。
测试1适用于快乐流。我使用SharedPreferences.setMockInitialValues(data);
来设置一些初始数据并检索它。
测试2测试抛出PlatformException
时会发生什么。我发现可以伪造这个,我可以像这样挂入PlatformChannel
:
sharedPreferencesMethodChannel
.setMockMethodCallHandler((MethodCall methodCall) async {
throw genericPlatformException;
});
当我只运行测试2时,它按预期工作,但如果我同时运行两个测试,测试2将失败。如果在测试1中我不使用SharedPreferences.setMockInitialValues(data);
并同时运行两者,则测试2将通过。
所以我想我只需要重置或撤消每个测试的模拟值设置。。。但是我该怎么做呢?似乎设置它们一次是永久的。
这似乎不可能做到。
像PlatformsExceptions
这样的测试行为可以通过使用mock来完成。
我只是允许在包装类上设置一个模拟SharedPreferences,这样在测试时就不会与真正的SharedPreferences
交互。
class WrapperClass {
SharedPreferences? _sharedPreferences;
set mockSharedPreferences(SharedPreferences mock) {
_sharedPreferences = mock;
}
Future<String> getData() async {
// The real SharedPreferences only gets called if no mock was set
_sharedPreferences ??= await SharedPreferences.getInstance();
return _sharedPreferences!.getString('my_key') ?? 'default';
}
}