首页 > 解决方案 > dart Mockito 可以模拟抽象类吗?

问题描述

我正在尝试向我的 dart/flutter 库中添加一些单元测试,而我的被测单元的依赖项之一是一个抽象类:

abstract class LoginService {
    Future<void> login(String username, String password);
}

当我添加@GenerateMocks([LoginService])到我的测试文件并运行build_runner时,它失败了:

mockito:mockBuilder on test/login_test.dart:  Invalid @GenerateMocks annotation: The GenerateMocks "classes" argument is missing, includes an unknown type, or includes an extension 

但如果我手动输入:

class MockLoginService extends Mock implements LoginService {}

没有编译错误。

如果我更改LoginService为不再存在abstract(使用一些虚拟实现),那么模拟成功。

有任何想法吗?我检查了 dart Mockito 的 GitHub 问题,但找不到有这个问题的人。

标签: flutterdartmockito

解决方案


我使用 mockito 来模拟一个抽象存储库。例如;

@GenerateMocks([NumberTriviaRepository])
void main(){
  final mockNumberTriviaRepository = MockNumberTriviaRepository();
}

使用 build_runner 生成文件;

flutter packages pub run build_runner build --delete-conflicting-outputs

推荐阅读