[英]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.