颤振测试失败。找不到编译器错误获取器'main'
Posted
技术标签:
【中文标题】颤振测试失败。找不到编译器错误获取器\'main\'【英文标题】:flutter test fails. compiler error getter not found 'main'颤振测试失败。找不到编译器错误获取器'main' 【发布时间】:2019-09-20 23:04:24 【问题描述】:我正在尝试使用终端运行颤振测试,但收到以下错误。以下文件 C:/Users/User/AppData/Local/Temp/flutter_test_listener.e6fa92b4-6cd1-11e9-b9cb-68f728ca4610/listener.dart 指定目录中不存在。
这是错误:
编译器消息: file:///C:/Users/User-45/AppData/Local/Temp/flutter_test_listener.e6fa92b4-6cd1-11e9-b9cb-68f728ca4610/listener.dart:46:17:
错误:找不到获取器:'main'。返回 test.main;
我的项目目录在另一个文件夹中。我该如何解决这个问题?谢谢
【问题讨论】:
【参考方案1】:在我的例子中,碰巧我在测试文件夹中的一个帮助类的名称以“_test”结尾,而编译器正在寻找一个主要方法。所以我重命名了助手类,问题就解决了。
【讨论】:
在重命名辅助类之后,我不得不执行flutter clean,然后它工作正常:) 天哪,它真的救了我……我对这个错误一无所知【参考方案2】:如果有人遇到上述问题,请尝试在测试类中添加main()
,如果已添加,则将其从测试类花括号中删除。我面对这个并将main()
从测试类中删除。
例如...
class GetConcreteNumberTrivia_Test extends Mock
implements NumberTriviaRepository
void main()
.....my implementation......
【讨论】:
你成就了我的一天。我正在测试来自resocoder
的相同代码,就像你的一样,这个解决方案修复了它【参考方案3】:
当合并混乱将 main() 放入一个类时,我遇到了这个错误。
【讨论】:
我没有合并混乱,我只是来自java并将main方法放在测试类中,因为我不知道更好。这可能是正确的答案。【参考方案4】:看来这个错误可能有很多不同的原因。在我的情况下,问题是一个文件foo_test.dart
,其唯一内容是//TODO
。所以它基本上是空的,编译器找不到预期的 main 方法。奇怪的是,它在另一个测试中抛出了错误!
当我删除foo_test.dart
后,它又可以工作了!希望这会有所帮助!
【讨论】:
【参考方案5】:我也遇到了这个错误。我的问题是我如何为我的测试命名文件。测试运行程序正在寻找这种模式“*_test.dart”(hier)。相应地重命名我的测试文件后,测试运行程序执行测试没有任何错误。
【讨论】:
【参考方案6】:就我而言,我将 expect() 条件保留在测试方法之外
test('',()
// expect()/assertion should be here
)
//not here
【讨论】:
【参考方案7】:这适用于最新的依赖项 (01/16/2022)。 2-3个错误的完整答案:
添加: build_runner: ^2.1.7
到 pubspec.yaml
//...
import 'package:mockito/annotations.dart';
class MockNumberTriviaRepository extends Mock implements NumberTriviaRepo
@GenerateMocks([NumberTriviaRepo])
void main()
late GetConcreteNumberTrivia usecases;
late MockNumberTriviaRepository mockNumberTriviaRepository;
late int tNumber;
late NumberTrivia tNumberTrivia;
setUp(()
mockNumberTriviaRepository = MockNumberTriviaRepository();
usecases = GetConcreteNumberTrivia(repo: mockNumberTriviaRepository);
tNumber = 1;
tNumberTrivia = NumberTrivia(text: 'test', number: 1);
);
test('should get a trivia for the number from the repo', () async
// arrange
when(mockNumberTriviaRepository.getConcreteNumberTrivia(tNumber))
.thenAnswer((_) async => Right(tNumberTrivia));
// act
final result = await usecases.execute(number: tNumber);
//assert
expect(result, Right(tNumberTrivia));
verify(mockNumberTriviaRepository.getConcreteNumberTrivia(tNumber));
verifyNoMoreInteractions(mockNumberTriviaRepository);
);
类 NumberTriviaRepository:
abstract class NumberTriviaRepository
Future<Either<Failure, NumberTrivia>>? getConcreteNumberTrivia(int number);
Future<Either<Failure, NumberTrivia>>? getRandomNumberTrivia();
类GetConcreteNumberTrivia:
class GetConcreteNumberTrivia
final NumberTriviaRepository repo;
GetConcreteNumberTrivia(
required this.repo,
);
Future<Either<Failure, NumberTrivia>?> execute(required int number) async
return await repo.getConcreteNumberTrivia(number);
【讨论】:
以上是关于颤振测试失败。找不到编译器错误获取器'main'的主要内容,如果未能解决你的问题,请参考以下文章
React 编译失败。找不到模块:无法解析“Main.css”
任务“:app:processDebugResources”的颤振执行失败。 AAPT:错误:找不到资源字符串/app_name
颤动的iOS构建失败(ld:找不到-lPods-Runner的库)