我正在尝试在我的项目中使用 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。
答案 0 :(得分:1)
感谢 jamesdlin 的评论,我能够解决这个问题:
@GenerateMocks
注释
@GenerateMocks([OrganizationRemoveDataSource])
void main(){
...
}
MockOrganizationRemoteDataSource
类并使用 build_runner 允许 Mockito 生成带注释的 GenerateMocks。更新:
由于在空安全飞镖中使用 Mockito
的复杂性。我遇到了一个很棒的库,它可以作为替代品使用,名为 Mocktail
。您可以在此处查看图书馆https://pub.dev/packages/mocktail。
答案 1 :(得分:0)