【问题标题】:Mock a Widget in Flutter tests在 Flutter 测试中模拟一个 Widget
【发布时间】:2021-02-09 11:17:24
【问题描述】:

我正在尝试为我的 Flutter 应用程序创建测试。简单例子:

class MyWidget extends StatelessWidget {
   @override
   build(BuildContext context) {
      return MySecondWidget();
   }
}

我想验证 MyWidget 实际上是在调用 MySecondWidget 而不构建 MySecondWidget

void main() {
   testWidgets('It should call MySecondWidget', (WidgetTester tester) async {
      await tester.pumpWidget(MyWidget());
      expect(find.byType(MySecondWidget), findsOneWidget);
   }
}

在我的情况下,这不起作用,因为MySecondWidget 需要一些特定且复杂的设置(如 API 密钥、Provider 中的值...)。我想要 "mock" MySecondWidget 是一个空的 Container(例如),这样它就不会在测试期间引发任何错误。

我该怎么做?

【问题讨论】:

  • 你最终弄清楚了吗?
  • 恐怕不太容易做到

标签: flutter testing dart mocking flutter-test


【解决方案1】:

您可以模拟MySecondWidget(例如使用Mockito),但在测试模式下您确实需要更改您的真实代码以创建MockMySecondWidget,所以它并不漂亮。 Flutter 不支持基于 Type 的对象实例化(通过 dart:mirrors 除外,但这与 Flutter 不兼容),因此您不能将类型“注入”为依赖项。要确定您是否处于测试模式,请使用 Platform.environment.containsKey('FLUTTER_TEST') - 最好在启动时确定一次并将结果设置为全局 final 变量,这将使任何条件语句都变得快速。

【讨论】:

    猜你喜欢
    • 2020-10-08
    • 2020-08-01
    • 2023-02-12
    • 2021-12-25
    • 2021-11-13
    • 1970-01-01
    • 2022-06-19
    • 2019-06-29
    • 2017-05-12
    相关资源
    最近更新 更多