如何使用 mockito 测试空值?

How to test nulls using mockito?

我正在使用mockito 4.1.3 ,这里我有一些测试class:

import 'package:flutter_test/flutter_test.dart';
import 'package:ghinbli_app/models/film_model.dart';
import 'package:ghinbli_app/network/ghibli_films.dart';
import 'package:mockito/mockito.dart';

class MockClient extends Mock implements GhibliFilms {
  @override
  Future<List<FilmModel>> getFilms() async{
    return null;
  }
}

void main() {
  final GhibliFilms ghibliMock = MockClient();
  test('If API call was unsuccessful and data received is null', () {

    expect(ghibliMock.getFilms(), null);
  });
}

MockClient class 中,我覆盖了一个名为 getFilms() 的方法和 returning null 来模拟调用某些 API return作为数据为空。


一个问题

当我尝试检查 getFilms() 是否实际上 return 是空值时,我的测试将失败并出现此错误(可能是因为 getFilms() 的 return 类型) :

Expected: <null>
     Actual: <Instance of 'Future<List<FilmModel>>'>

如何检查和测试来自 getFilms() 的数据实际上是空的,我做错了什么?

我已经测试了您的代码并遇到了与您相同的错误。进行这些更改后一切正常,请自行尝试。

class MockClient extends Mock implements GhibliFilms {
  @override
  Future<List<FilmModel>> getFilms() async {
    return Future.value(null); // this is not that important
  }
}

void main() {
  final GhibliFilms ghibliMock = MockClient();

  // async/await here was important
  test('If API call was unsuccessful and data received is null', () async { 
    expect(await ghibliMock.getFilms(), null); 
  });
}