首页 > 解决方案 > 如何在颤振应用程序中获得主要功能的代码覆盖率?

问题描述

对于看起来像这样的应用程序,我如何获得 100% 的主函数代码覆盖率?

lib/main.dart
import 'package:flutter/material.dart';

void main() {
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(body: Center(child: Text('Home Page'))),
    );
  }
}
test/main_test.dart
import 'package:flutter_test/flutter_test.dart';
import 'package:example/main.dart';

void main() {
  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
    await tester.pumpWidget(MyApp());

    // Verify that the init page is the Home Page.
    expect(find.text('Home Page'), findsOneWidget);
  });
}

--

重新创建代码覆盖率:

$ flutter test --coverage --coverage-path ./coverage/lcov.info
$ genhtml ./coverage/lcov.info -o ./coverage/html

输出

...
Generating output.
Processing file lib/main.dart
Writing directory view page.
Overall coverage rate:
  lines......: 66.7% (4 of 6 lines)
  functions..: no data found

lcov.info
SF:lib/main.dart
DA:3,0
DA:4,0
...

唯一“未发现”的代码是:

void main() {
  runApp(App());
}

我应该如何编写测试以确保涵盖此功能?它可以在集成测试之外完成吗?

标签: flutterdarttest-coverage

解决方案


mian函数是 Flutter 应用的入口点。main通常,您的工作应用程序内部(或至少在其附近)有很多环境设置和 DI 指令,应该从测试中覆盖。

单元/小部件测试有自己的覆盖设置、测试类的测试替身和另一个main入口点(从您自己的示例中可以看到)。测试设置通常在setUp()main 函数中进行。

简历: 您的测试不调用main应用程序功能是可以的。他们有自己的main。100% 的代码覆盖率怎么样——这个目的是不合理的。良好的覆盖率取决于您的测试策略。至于我,我想70%是好的。


推荐阅读