【发布时间】: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])并且正在运行 -
但是删除那些初始语句导致构建成功。如果我理解正确的话,删除这些行没有副作用。谢谢!