flutter - 如何在颤振应用程序中获得主要功能的代码覆盖率?
问题描述
对于看起来像这样的应用程序,我如何获得 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());
}
我应该如何编写测试以确保涵盖此功能?它可以在集成测试之外完成吗?
解决方案
mian
函数是 Flutter 应用的入口点。main
通常,您的工作应用程序内部(或至少在其附近)有很多环境设置和 DI 指令,应该从测试中覆盖。
单元/小部件测试有自己的覆盖设置、测试类的测试替身和另一个main
入口点(从您自己的示例中可以看到)。测试设置通常在setUp()
main 函数中进行。
简历:
您的测试不调用main
应用程序功能是可以的。他们有自己的main
。100% 的代码覆盖率怎么样——这个目的是不合理的。良好的覆盖率取决于您的测试策略。至于我,我想70%是好的。
推荐阅读
- c# - 如何在控制台应用程序中使用 c# 将文件从本地计算机上传到 s3 glacier 的库?
- spring - 在与内存服务器集成时,如何在 Spring Boot 中执行测试?
- php - 在两个 php 文件之间传递 csv 文件
- python - 我可以在 matplotlib 中使绘图的轴限制交互吗?
- java - 错误:(dberror) 268 - 列定义不明确:ROLLNO: line 1 col 7 (at pos 7)
- swift - 在 swift 4.0 中添加多个相同的 SKSpriteNode()
- logging - AWS lambda:如果 log4j.xml 中不存在环境变量,有没有办法设置默认值?
- java - 从具有列表作为数据字段的对象列表中显示 TableView 中的所有项目(JavaFX、TableView、FXML)
- reactjs - 使用 React 上传多张图片
- widget - 使用输入小部件进行计算,Bonitasoft