使用颤动小部件测试来测试接收意图

时间:2020-11-01 18:57:18

标签: android flutter testing android-intent flutter-test

我有一个小型的flutter应用程序,可以在文本小部件中显示传入的共享操作(也就是意图)。接收部分是这样的:

class MyAppState extends State<MyApp> {

  @override
  void initState() {

     ReceiveSharingIntent.getInitialText().then((String value) {
        if (value == null) return;
        print("got intent " + value);
        add_to_widget (value) ; 
     });

     ReceiveSharingIntent.getTextStream().listen((String value) {
        print("got intent " + value);
        add_to_widget (value) ; 
     });

}

当我在android虚拟设备上运行代码时,意图被正确收集并且文本显示在小部件中,所以我想我的AndroidManifest.xml正确了:

<intent-filter>
  <action android:name="android.intent.action.MAIN"/>
  <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

<intent-filter>
  <action android:name="android.intent.action.SEND" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:mimeType="text/*" />
</intent-filter>

但是我想像这样用flutter_test中的小部件测试器自动测试它:


void main() {
  testWidgets('receive intent ', (WidgetTester tester) async {
    await tester.pumpWidget(MyApp());

    // the missing bit
    await fire_share_action ('hello_intent') ; 


    expect (find.text('hello_intent'), findsOneWidget) ;
  });
}

如您所见,缺少的部分是fire_share_action的内容。我尝试触发https://pub.dev/packages/intent中的意图,但是尽管没有错误也没有异常,但意图的输出并没有像我在avd中运行时那样, expect 也没有通过

我有想念某件事的感觉。测试意图的接受应该是一件基本的事情,对吧?

我很确定将android代码放到 fire_share_action 中(像我一样)是错误的方法,但是-我还能怎么做?如何从“ testWidgets”内部向我的应用发送意图?还是我必须创建一个模拟接收器来进行三明治测试?我不想进入flutter_driver,也不想进入unit_test;小部件测试是我的理想之选,因为它们提供了快速周转和可靠性之间的中间点。

我搞砸了几天的编码,感到非常沮丧。尽管有很多关于在flutter应用程序中发送和接收Intent的文献,但我对 testing 的intent的接收一无所知,更不用说测试 send intent了。

有什么主意吗?

0 个答案:

没有答案