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();