我在这里是为了澄清 Flutter 中的单元测试。
这是我用来测试我的 flutter_bloc bloc 组件的典型测试片段。
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
对象声明为顶级变量以使以下操作成为可能。
- 使
DataRepository
每个blocTest
函数 都可以访问对象 - 使 blocTest() 方法中的每个“构建”和“验证”方法都可以访问 DataRepository 对象。
我的问题是,
当我们并行运行测试时,使用这样的全局顶级变量有什么副作用吗?