对于这样的应用程序,如何在主函数上获得 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());
}
我应该如何编写测试来确保覆盖该功能?可以在集成测试之外完成吗?
main
函数是Flutter应用程序的入口点。通常,main
(或至少在其附近)内有很多针对您的工作应用程序的环境设置和 DI 指令,应从测试中覆盖它们。
单元/小部件测试有自己的重写设置、测试类的测试双打和另一个
main
入口点(正如您从自己的示例中看到的)。测试设置通常在 main 的 setUp()
函数中进行。
简历: 您的测试不调用
main
应用程序函数是可以的。他们有自己的main
。 100% 的代码覆盖率怎么样——这个目的是不合理的。良好的覆盖率取决于您的测试策略。对我来说,我觉得70%就不错了。