【Flutter】shared_preferencesのsetMockInitialValuesが最初の1度しか適用されない
例えば以下のように各テストでSharedPreferences
に異なる初期値を設定したい場合、最初に実行したsetMockInitialValues
以外は無視されるっぽい。
以下の例では(おそらく){ 'test': 0 }
が有効になり{ 'test': 1 }
は反映されない。
void main() { setUp((){ SharedPreferences.setMockInitialValues({ 'test': 0, }); }); group('test1', (){ setUp((){ SharedPreferences.setMockInitialValues({ 'test': 1, }); }); testWidget('test1-1', (tester) async { /* ~~ */ }); }); }
一応setMockInitialValues
の説明にも記載されいている?
If the singleton instance has been initialized already, it is nullified.
シングルトンインスタンスがすでに初期化されている場合、それは無効になります。
対処法
テストごとにSharedPreferencesの内容を変えたい場合は、setMockInitialValues
は使わずに普通にSharedPreferences.setString()
などを使ってMock化しないほうが良さそう。