Я здесь для разъяснения о модульных тестах во Flutter.
Вот типичный тестовый фрагмент, который я использую для тестирования моего компонента flutter_blo c blo c.
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
functions - делает объект DataRepository доступным для каждого метода 'build' и 'verify' в методе blocTest ().
Мой вопрос:
есть ли побочный эффект от использования глобальной переменной верхнего уровня, подобной этой, когда мы выполняем тесты параллельно?