我正在撰寫一個顫振應用程式,我正在使用 GetIt 進行依賴注入。
當我撰寫單元測驗時,我會做這樣的事情:
void main() {
group("tests", () {
test("test1", () {
GetIt.I.reset();
GetIt.I.registerSingleton(MyDependency());
// Some code using GetIt.I<MyDependency>()
});
test("test2", () {
GetIt.I.reset();
GetIt.I.registerSingleton(MyDependency());
// Some code using GetIt.I<MyDependency>()
});
});
}
當我一個接一個地運行測驗時,它運行良好。
當我一次運行所有測驗時,出現如下錯誤GetIt.I<MyDependency>()...:
'package:get_it/get_it_impl.dart': Failed assertion: line 372 pos 7: 'instanceFactory != null': Object/factory with type HttpActions is not registered inside GetIt.
所以我的猜測是,測驗并行運行,并且一個測驗的設定與另一個測驗GetIt.I.reset()的設定發生沖突。
那么我該如何解決這個問題呢?
- 我可以以某種方式告訴測驗,它們不能并行運行嗎?
- 或者
GetIt在這種情況下有什么安全使用的方法嗎?
uj5u.com熱心網友回復:
我認為您的問題與并行運行測驗無關,而與GetIt.I.reset()異步方法這一事實有關:
執行
Future<void> reset({bool dispose = true});
正如在此方法的包的檔案中提到的:
[...] 由于處置函式可以是異步的,您應該等待此函式。
代碼示例
我根據您提供的代碼制作了一個新的測驗示例,并受到為包撰寫的單元測驗的啟發,它似乎作業正常。
import 'package:flutter_test/flutter_test.dart';
import 'package:get_it/get_it.dart';
import 'package:so_tests/my_dependency.dart';
void main() {
// This method provided by `flutter_test` is called before each test.
setUp(() async {
// Make sure the instance is cleared before each test.
await GetIt.I.reset();
});
group('tests', () {
test('test1', () {
final getIt = GetIt.instance;
getIt.registerSingleton(MyDependency());
// Some code using getIt<MyDependency>()
});
test('test2', () {
final getIt = GetIt.instance;
getIt.registerSingleton(MyDependency());
// Some code using getIt<MyDependency>()
});
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/366888.html
