Flutter 当我们并行运行测试时,使用全局顶级变量是否有任何副作用?

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;

我在这里澄清关于颤振中的单元测试

下面是一个典型的测试片段,我用它来测试我的flatter_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
对象被声明为顶级变量,以便实现以下功能

  • 使每个
    blocTest
    功能
  • 使DataRepository对象可用于每个“构建”和 blocTest()方法中的“verify”方法
  • 我的问题是,


    当我们并行运行测试时,使用这样的全局顶级变量是否有任何副作用?

    为什么不在
    blocTest
    build
    函数中创建存储库?如果我在build函数中创建存储库对象,那么,我如何在“verify”方法中引用该存储库对象以验证是否调用了login方法?您的bloc应该有一个对存储库的引用是的,bloc有一个对存储库的引用。但是,我应该在哪里保留对集团的引用?“verify”方法中似乎也没有bloc对象。如果我将bloc实例而不是datarepository作为顶级变量,我是否也会遇到副作用的问题???@RémiRousselet先生,上面的测试运行绿色,但我担心副作用?由于集团在“验证”方法中不可用,我该怎么办?