如何模拟未来的方法而不是获取类型'Null'不是颤振中'Future <>'类型的子类型
Posted
技术标签:
【中文标题】如何模拟未来的方法而不是获取类型\'Null\'不是颤振中\'Future <>\'类型的子类型【英文标题】:How to mock a future method and not get type 'Null' is not a subtype of type 'Future<>' in flutter如何模拟未来的方法而不是获取类型'Null'不是颤振中'Future <>'类型的子类型 【发布时间】:2021-08-01 11:02:28 【问题描述】:我想模拟这个类和这个特定的方法
class FeedApiService extends ApiService
Future<FeedResponse> fetchFeed(Map<String, String> params) async
...
...
我的单元测试是这样的
class FeedApiServiceMock extends Mock implements FeedApiService
void main()
test('..', ()
FeedApiServiceMock feedApiServiceMock = FeedApiServiceMock();
when(feedApiServiceMock.fetchFeed()).thenAnswer(
(_) => Future.value(FeedResponse(items: 1)),
);
expect(await feedApiServiceMock.fetchFeed().items, 1);
);
我只是想看看 fetch feed 被正确地模拟了,但是我收到了这个错误:
type 'Null' is not a subtype of type 'Future<FeedResponse>'
【问题讨论】:
您是否启用了 null-safety?如果是这样,您现在需要使用@GenerateMocks
。请参阅README.md
文件(或the NULL_SAFETY_README.md
了解更多详细信息)。
是的,我启用了 null-safety。我会试试@GenerateMocks,看看它是否能解决问题。
成功了,谢谢!
【参考方案1】:
看看在 test 和 thenAnswer
方法中添加 async 是否可以解决问题。
void main()
test('..', () async
FeedApiServiceMock feedApiServiceMock = FeedApiServiceMock();
when(feedApiServiceMock.fetchFeed()).thenAnswer(
(_) async=> Future.value(FeedResponse(items: 1)),
);
expect(await feedApiServiceMock.fetchFeed().items, 1);
);
【讨论】:
不,这不起作用,很遗憾。它给了我同样的错误。以上是关于如何模拟未来的方法而不是获取类型'Null'不是颤振中'Future <>'类型的子类型的主要内容,如果未能解决你的问题,请参考以下文章
使用 Mocktail 测试模拟 http 客户端时,类型“Null”不是“Future<Response>”类型的子类型
如何在 SQL Server 中使用 XML 节点传递 NULL 而不是字符串格式的“NULL”值