Flutter运行widget_test.dart提示MyApp不是类的报错如何解决?
Flutter widget测试提示
MyApp不是类的解决方案 报错原文:
The name 'MyApp' isn't a class. Try correcting the name to match an existing class.
中文含义:名称MyApp不是一个类,请修正名称以匹配已存在的类
问题产生的常见原因
- 测试文件未正确导入
MyApp类所在的源文件:默认新建的Flutter项目中MyApp类定义在lib/main.dart文件内,如果你后续修改了MyApp的存放路径,或是删除了默认的导入语句,测试文件就无法识别该类 MyApp类名已被修改:重构代码时如果将MyApp类重命名为其他名称(比如MainApp、HomeApp等),测试代码没有同步修改就会触发报错MyApp被定义为私有类:Dart语法中以下划线_开头的类属于当前文件私有类,无法被其他文件导入访问,如果你的类名被改为_MyApp,测试文件就无法识别
具体修复步骤
- 补全/修正测试文件的导入语句
打开test/widget_test.dart,在顶部添加MyApp对应文件的导入,默认项目的导入语句如下(将示例中的项目名替换为你自己的项目名称即可):
import 'package:flutter_test/flutter_test.dart'; import 'package:你的项目名称/main.dart';
如果你已经把MyApp移到了lib/page/home.dart这类自定义路径下,将导入路径改为对应路径即可。
同步类名
打开MyApp所在的源文件,确认类名和测试代码中调用的名称完全一致。比如你已经把类名改为CustomApp,就将测试代码中的await tester.pumpWidget(const MyApp());修改为await tester.pumpWidget(const CustomApp());。修正私有类问题
如果你的MyApp类被定义为了私有类(类名以下划线开头),要么将类名改为公共类(去掉开头的下划线),要么将测试逻辑移到MyApp所在的文件内(不推荐,测试代码建议单独存放)。
修正后的代码示例
import 'package:flutter_test/flutter_test.dart'; // 替换为你自己项目的正确导入路径 import 'package:my_demo/main.dart'; testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. await tester.pumpWidget(const MyApp()); // 后续测试逻辑不变 });
内容的提问来源于stack exchange,提问作者Leskeboy
相关产品推荐
相关产品推荐

