0

我在这里是为了澄清 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对象声明为顶级变量以使以下操作成为可能。

  1. 使DataRepository每个blocTest 函数 都可以访问对象
  2. 使 blocTest() 方法中的每个“构建”和“验证”方法都可以访问 DataRepository 对象。

我的问题是,

当我们并行运行测试时,使用这样的全局顶级变量有什么副作用吗?

4

0 回答 0