[英]Unit tests running in parallel in flutter when using GetIt
我正在編寫一個 flutter 應用程序,我正在使用 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
?我認為您的問題與並行運行測試無關,而是與GetIt.I.reset()
是一種異步方法有關:
Future<void> reset({bool dispose = true});
正如package 的文檔中提到的這種方法:
[...] 因為 dispose 函數可以是異步的,所以你應該等待這個 function。
我根據您提供的代碼制作了一個新的測試樣本,並受到為 package 編寫的單元測試的啟發,它似乎工作正常。
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>()
});
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.