颤振测试失败。找不到编译器错误获取器'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

dtrace: 编译脚本失败 找不到预处理器

颤动的iOS构建失败(ld:找不到-lPods-Runner的库)

错误:在颤振中找不到类型“ui.TextHeightBehavior”

打字稿编译器:找不到名称“地图”