Flutter 使用MockClient时获取null

Flutter 使用MockClient时获取null,flutter,unit-testing,dart,mocking,mockito,Flutter,Unit Testing,Dart,Mocking,Mockito,对于我的单元测试,我使用如下方法: 如果我使用此代码,则我正在进行一个通过的测试: test('Adding data manually', () async { final GhibliFilms ghibliMock = GhibliFilms(); ghibliMock.addFilm(FilmModel( director: 'test director', description: 'test',

对于我的单元测试,我使用如下方法:

如果我使用此代码,则我正在进行一个通过的测试:

    test('Adding data manually', () async {
      final GhibliFilms ghibliMock = GhibliFilms();

      ghibliMock.addFilm(FilmModel(
          director: 'test director',
          description: 'test',
          releaseDate: 'test',
          producer: 'test'
      ));

      expect(ghibliMock.films.length, 1);

    });

吉卜力薄膜法:

  List<FilmModel> _films = [];

  void addFilm(FilmModel film){
    _films.add(film);
  }
当我更改
final gibilifilms时,gibilimock=gibilifilms()
最终MockClient吉卜里莫克=MockClient()(其余代码保持不变)我的测试将失败,并显示以下消息:

NoSuchMethodError: The getter 'length' was called on null.
Receiver: null
Tried calling: length
我的方法有什么问题?如何在我的案例中使用MockClient?

  • 您制作了一个
    GhibliFilms
    Mock
    ,但没有存根它的
    。films
    getter,因此默认情况下它将返回
    null
    <代码>期望值(吉卜力马克电影长度,1)会导致空指针异常

  • 如果您的
    getFilms
    覆盖是为了覆盖
    .films
    getter,那么您的覆盖显式返回
    null
    。目前还不清楚这是为了什么目的

  • 看来你想要的是:

    test('手动添加数据',()异步{
    final MockClient ghibliMock=MockClient();
    当(吉卜力马克电影),然后返回(电影模型(
    总监:“测试总监”,
    描述:'测试',
    发布日期:'测试',
    制片人:“测试”
    ));
    expect(吉卜力马克电影长度,1);
    });
    
    但请注意,该测试完全没有意思,因为它不测试任何关于实际类的内容

    类MockClient。。。实现GhibliFilms
    意味着
    MockClient
    提供了
    GhibliFilms
    接口,但提供了自己的、完全独立的实现。
    Mock
    s的目的不是替换您正在测试的类;它是用来替换您正在测试的代码所依赖的对象的

    如果您试图替换
    GhibliFilms
    类中的单个方法,那么您应该只
    扩展它并覆盖您想要的特定方法。例如:

    类fakegiblifilms扩展了giblifilms{ @凌驾 未来的getFilms()异步{ 返回[ 电影模型( 总监:“测试总监”, 描述:'测试', 发布日期:'测试', 制片人:“测试”, ) ]; } }
    当您使用
    When(giblimock.films).然后返回..
    是否意味着调用
    .films
    时,您正在返回自定义值?是的,
    当(…)。然后返回(…)
    创建一个返回指定值的存根。看。
    NoSuchMethodError: The getter 'length' was called on null.
    Receiver: null
    Tried calling: length