【发布时间】:2020-06-06 21:29:07
【问题描述】:
1。问题
testWidgets 函数显然只是test 函数的子案例。
我现在要解决的一个用例是为多个testWidgets 抽取相同的小部件,为多个testWidgets 抽取一个setUp。但是,如果它在每个测试中创建一个新实例,我该怎么做?
我尝试在测试之外,在main() 中初始化一个WidgetTester,但WidgetTester 只有一个私有构造函数:
class WidgetTester
extends WidgetController
implements HitTestDispatcher, TickerProvider {
WidgetTester._(TestWidgetsFlutterBinding binding) : super(binding) {
if (binding is LiveTestWidgetsFlutterBinding)
binding.deviceEventDispatcher = this;
}
我不太明白 Flutter 团队是如何完成这项工作的,但是以他们在 testWidgets 函数中所做的相同方式初始化 WidgetTester 对我不起作用:
final TestWidgetsFlutterBinding binding
= TestWidgetsFlutterBinding.ensureInitialized()
as TestWidgetsFlutterBinding;
final WidgetTester tester = WidgetTester._(binding);
2。一个例子
一个简单的例子是尝试分解使用来自flutter create 的每个新 Flutter 项目创建的 Flutter 演示的测试。在其中,我们可以尝试将应用的初始设置测试与点击动作测试分开:
testWidgets('Initial setup', (WidgetTester tester) async {
await tester.pumpWidget(MyApp());
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsNothing);
});
testWidgets('Increment the counter on tap', (WidgetTester tester) async {
await tester.pumpWidget(MyApp());
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
});
我们的想法是尝试将await tester.pumpWidget(MyApp()); 移动到setUp 函数中。
【问题讨论】:
标签: testing flutter dart widget