如何根据动态返回的数据在 Flutter 测试组中创建参数化测试 运行

How to create parameterized test run in Flutter test group from dynamically returned data

我想用 Flutter 创建参数化测试。我有 forEach 循环,我想使用它来根据应用程序对我的响应生成参数化测试。任何想法如何去做?我想到了:

    group('Group for tests', () {
      test("Get necessary list from app_handler", () {
        expect(app_handler.async_function1(driver).then((value) => myListOfItems), completes;
        expect(myListOfItems, isNotEmpty);
      });

      myListOfItems.forEach((myItem) {
        test("Test for $myItem", () {
          expect(app_handler.async_function2(driver, myItem), completes);
        });
      });

但这不起作用。 myListOfItems 在第一次测试中未通过空检查,它应该是一个已填充的列表。 所以我不知何故需要根据应用程序在测试期间对我的响应动态准备测试用例。

您可以使 test() 方法异步,然后等待您的异步方法完成。 (已编辑)

感谢@Alessio 的讨论和@jamesdlin 的评论,我最终得到了一个解决方案,该解决方案涉及在一次测试后创建一个包含数据的文件,然后在另一次测试中使用该文件。

     group('Smoke test', () {
       test("Get my vals", () async {
         final myVals= await app_handler.getMyVals(driver);
         expect(myVals, isNotEmpty);
         final file = File('myVals.json');
         file.writeAsString(jsonEncode({'myVals':myVals}));
       });
     }, tags: "Test_1");

    group('Main test', () {
      final file = File('myVals.json');
      final myVals = (json.decode(file.readAsStringSync())['exceptions'] as List).cast<String>();
      myVals.forEach((myVal) {
      test("Test $myVal", () {
        expect(app_handler.async_func(driver, myVal), completes);
      });
    }, tags: "Test_2"););

因此测试执行器将首先使用第一个标记调用测试,然后使用第二个标记调用测试,在第二个测试运行期间将动态生成测试。