如何在flutter应用程序中获得主函数的代码覆盖率?

问题描述

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

const [currentStates,setCurrentStates]= useState({ //your initial code here }) const handleInputChange = event => { console.log(event.target.value) setCurrentStates({ ...currentStates,[name]: event.target.value}); };
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
...

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

解决方法

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

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

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