颤振 Mockito。模拟失败

时间:2021-05-18 02:13:59

标签: flutter unit-testing mockito dio

我正在尝试在我的项目中使用 mockito 来测试 API。这是 organization_test.dart 下的一小段代码。我只会提供直到错误行,因为这是唯一的问题。

class MockOrganizationRemoteDataSource extends Mock implements OrganizationRemoteDataSource {}


void main(){
 late final MockOrganizationRemoteDataSource mockOrganizationDataSource;
 late final IOrganizationRepository iOrganizationRepository;
 final tOrgName = "someOrgName";

 setUp((){
  mockOrganizationRemoteDataSource = MockOrganizationRemoteDataSource();
  iOrganizationRepository = IOrganizationRepository(mockOrganizationRemoteDataSource);
 });

 test("Should fetch the organization",() async {
  when(mockOrganizationRemoteDataSource.getOrganization(tOrgName)) // Getting ERROR on this line
   .thenAnswer(
      (_) async => Response(
       requestOption: RequestOption(
        path: <Some url in here ??>
        data: <Some json response here ??>
        responseType: ResponseType.json)
      ),
   );
 
   final result = await iOrganizationRepository.fetchOrganization(tOrgName);   
   
   ...
   ... // some more code here


 });
}


然后我得到的错误是 type 'Null' is not a subtype of type 'Future<Response<dynamic>>'

我期待如果我使用模拟,我可以从模拟数据源调用 getOrganization 方法并假装回答响应。然而在调试时,我总是最终引用 Un-mocked 类,它是 OrganizationRemoteDataSource 导致空值。

顺便说一句,我正在使用启用了 null-safety 和 Dio 的 flutter。

2 个答案:

答案 0 :(得分:1)

感谢 jamesdlin 的评论,我能够解决这个问题:

  • 在 void main() 中添加 @GenerateMocks 注释

@GenerateMocks([OrganizationRemoveDataSource])
void main(){
...
}

  • 删除了 MockOrganizationRemoteDataSource 类并使用 build_runner 允许 Mockito 生成带注释的 GenerateMocks。

更新:

由于在空安全飞镖中使用 Mockito 的复杂性。我遇到了一个很棒的库,它可以作为替代品使用,名为 Mocktail。您可以在此处查看图书馆https://pub.dev/packages/mocktail

答案 1 :(得分:0)