如何模拟未来的方法而不获取类型“Null”不是颤振中类型“Future<>”的子类型

Rar*_*eat 6 unit-testing mocking mockito dart flutter

我想模拟这个类和这个特定的方法

class FeedApiService extends ApiService {
  Future<FeedResponse> fetchFeed(Map<String, String> params) async {
    ...
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

我的单元测试是这样的

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);
  });
}
Run Code Online (Sandbox Code Playgroud)

我只想看到 fetch feed 被正确模拟,但我收到此错误:

type 'Null' is not a subtype of type 'Future<FeedResponse>'
Run Code Online (Sandbox Code Playgroud)

cro*_*x5f 1

看看在测试和thenAnswer方法中添加异步是否可以解决问题。

void main() {
  test('..', () async{
    FeedApiServiceMock feedApiServiceMock = FeedApiServiceMock();
    when(feedApiServiceMock.fetchFeed({})).thenAnswer(
        (_) async=> Future.value(FeedResponse(items: 1)),
      );
    expect(await feedApiServiceMock.fetchFeed({}).items, 1);
  });
}

Run Code Online (Sandbox Code Playgroud)

  • 不,不幸的是,这不起作用。它给了我同样的错误。 (2认同)