【问题标题】:The GenerateMocks annotation contains a class which appears to already be mocked inlineGenerateMocks 注释包含一个似乎已经内联模拟的类
【发布时间】:2023-02-18 15:58:17
【问题描述】:

我正在关注 ResoCoder Clean Architecture 教程,该教程与当前的软件包版本不相上下。

目前我在flutter pub run build_runner build时收到错误Invalid @GenerateMocks annotation: The GenerateMocks annotation contains a class which appears to already be mocked inline: MockRemoteDataSource; use the 'customMocks' argument in @GenerateMocks to specify a unique name.

import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';

class MockRemoteDataSource extends Mock implements CleaningJobRemoteDataSource {}

class MockLocalDataSource extends Mock implements CleaningJobLocalDataSource {}

class MockNetworkInfo extends Mock implements NetworkInfo {}

@GenerateMocks([CleaningJobRemoteDataSource])
@GenerateMocks([CleaningJobLocalDataSource])
@GenerateMocks([NetworkInfo])
void main() {
  late final CleaningJobRepositoryImpl repository;
  late final MockMockRemoteDataSource mockRemoteDataSource;
  late final MockMockLocalDataSource mockLocalDataSource;
  late final MocMockNetworkInfo mockNetworkInfo;

这是继本教程的第一个测试用例成功适应当前 Mockito 版本和此 answer 类似问题之后。

根据错误消息,我会假设我已经创建了一个具有此名称的类,但我无法想象在哪里。或者我可以想象它是这个class MockRemoteDataSource extends Mock implements CleaningJobRemoteDataSource {},但这在不同的单元测试中与GenerateMocks 结合使用。

有任何想法吗?谢谢

【问题讨论】:

  • 我不知道为什么错误消息引用了MockRemoteDataSource,但你有@GenerateMocks([NetworkInfo]),这将创建一个MockNetworkInfo类。您已经在几行之前声明了一个 MockNetworkInfo 类。
  • 为什么你有 class MockFoo extends Mock implements Foo {} 定义?您应该为所有这些类使用 @GenerateMocks。 (另外,我不知道它是否重要,但典型的用法是使用 @GenerateMocks 和你想要模拟的所有类的 List 而不是多次使用 @GenerateMocks 。)
  • 基本上是因为它在另一个单元测试中是这样工作的。但是所以你说 - 我也想知道 - 上述两个声明是冲突的并且不需要。另一个测试有 class MockCleaningJobRepository extends Mock implements CleaningJobRepository {} @GenerateMocks([MockCleaningJobRepository]) 并且正在运行
  • 但是删除那些初始语句导致构建成功。如果我理解正确的话,删除这些行没有副作用。谢谢!

标签: flutter mocking mockito


【解决方案1】:

我有同样的问题。但幸运的是我能够解决它。

我做了以下事情:

  1. 清理项目 flutter clean

  2. 获取包裹 flutter pub get

  3. 删除测试文件中所有未使用的导入

  4. 运行 build_runner flutter pub run build_runner build

    它生成了这个文件[test file].mocks.dart

    我希望这个对你有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2017-05-14
    • 2015-04-13
    相关资源
    最近更新 更多