Flutter 当我们并行运行测试时,使用全局顶级变量是否有任何副作用?
我在这里澄清关于颤振中的单元测试 下面是一个典型的测试片段,我用它来测试我的flatter_bloc组件Flutter 当我们并行运行测试时,使用全局顶级变量是否有任何副作用?,flutter,dart,flutter-test,flutter-bloc,Flutter,Dart,Flutter Test,Flutter Bloc,我在这里澄清关于颤振中的单元测试 下面是一个典型的测试片段,我用它来测试我的flatter_bloc组件 void main() { TestWidgetsFlutterBinding.ensureInitialized(); ///we have only one data repository which is referred in all blocTests defined ///in this file DataRepository dataRepository;
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
///we have only one data repository which is referred in all blocTests defined
///in this file
DataRepository dataRepository;
setUp(() {
dataRepository = mockData.MockDataRepository();
});
blocTest('User can login with a valid username and valid password',
build: () {
///code referring dataRepository
when(dataRepository.login("username","password"))
.thenAnswer((_) async =>
mockData.setupSuccessObject(mockData.setupUser()));
return LoginPageBloc(
dataRepository: dataRepository,);
},
act: (bloc){
///...
},
expect: [
///...
],
verify: () async {
///code referring dataRepository
verify(dataRepository.login("username", "password"))
.called(1);
});
blocTest('User cannot login with invalid username or password',
build: () {
///code referring dataRepository
when(dataRepository.login("username","password"))
.thenAnswer((_) async =>
mockData.setupAuthFailedObject());
return LoginPageBloc(
dataRepository: dataRepository,);
},
act: (bloc){
///...
},
expect: [
///...
],
verify: () async {
///code referring dataRepository
verify(dataRepository.login("username", "password"))
.called(1);
});
}
在上面的代码片段中,您可以看到,DataRepostory
对象被声明为顶级变量,以便实现以下功能
blocTest
功能当我们并行运行测试时,使用这样的全局顶级变量是否有任何副作用?为什么不在
blocTest
的build
函数中创建存储库?如果我在build函数中创建存储库对象,那么,我如何在“verify”方法中引用该存储库对象以验证是否调用了login方法?您的bloc应该有一个对存储库的引用是的,bloc有一个对存储库的引用。但是,我应该在哪里保留对集团的引用?“verify”方法中似乎也没有bloc对象。如果我将bloc实例而不是datarepository作为顶级变量,我是否也会遇到副作用的问题???@RémiRousselet先生,上面的测试运行绿色,但我担心副作用?由于集团在“验证”方法中不可用,我该怎么办?