Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 为什么Dart未来会影响颤振单元测试?_Flutter_Unit Testing_Dart_Testing - Fatal编程技术网

Flutter 为什么Dart未来会影响颤振单元测试?

Flutter 为什么Dart未来会影响颤振单元测试?,flutter,unit-testing,dart,testing,Flutter,Unit Testing,Dart,Testing,如果我添加到 在构造函数中加载资产文件 import 'package:flutter/services.dart' show rootBundle; Future<String> loadAsset(String path) async { return await rootBundle.loadString(path); } class Counter { int value = 0; void increment() => value++; void

如果我添加到 在构造函数中加载资产文件

import 'package:flutter/services.dart' show rootBundle;

Future<String> loadAsset(String path) async {
  return await rootBundle.loadString(path);
}

class Counter {
  int value = 0;
  void increment() => value++;
  void decrement() => value--;

  Counter() {
    loadAsset('assets/hello.txt').then((dynamic output) {
      print('$output');
    });
  }
}
那么我期待着考试仍然会通过

我不知道

  • print
    语句将在
    counter.increment()之前或之后执行
  • 也不知道它是在
    expect(counter.value,1)
    之前还是之后运行
  • 但这并不重要,因为计数器将在构造函数的第一行运行之前初始化,
    expect
    只能在
    increment()
    完成后运行

    事实并非如此。我得到:

    > flutter test test/counter_test.dart
    Running "flutter pub get" in counter...                         1,010ms
    00:03 +0 -1: Counter value should be incremented [E]
      Null check operator used on a null value
      package:flutter/src/services/asset_bundle.dart 225:39  PlatformAssetBundle.load
      ...
      test/counter_test.dart 7:21                            main.<fn>
      
    00:03 +0 -1: Some tests failed.
    
    >颤振测试/反向测试.dart
    在柜台上运行“颤振酒吧”功能。。。1010ms
    00:03+0-1:计数器值应递增[E]
    对空值使用的空检查运算符
    包装:颤振/src/services/asset_bundle.dart 225:39平台组件bundle.load
    ...
    测试/反测试。省道7:21主。
    00:03+0-1:某些测试失败。
    
    为什么飞镖
    未来
    会干扰颤振测试

    更新

    好了,现在我已经输入了问题,我看到问题了。当increment和expect语句运行时,实例
    最终计数器
    实际上尚未初始化。这是经过设计的,因为
    wait
    的结果可能对对象很重要

    不过,构造函数中的
    wait
    -ing(用于测试)是否存在固有缺陷?如果要初始化资产中的某些数据,您将如何重写此测试

    更新2


    这似乎与版本相关。我正在使用
    flatter 2.1.0-12.2.pre•channel beta

    将此添加到要首先执行的单元测试中:

    TestWidgetsFlutterBinding.ensureInitialized();
    

    否则,您将在访问根捆绑包时遇到问题。

    您确定失败的是未来而不是资产加载吗?@nvoigt您是对的。。。但现在我更困惑了。你看到发生什么事了吗?以上代码已完成。
    TestWidgetsFlutterBinding.ensureInitialized();