【问题标题】:How to test nulls using mockito?如何使用 mockito 测试空值?
【发布时间】:2021-04-27 16:31:25
【问题描述】:

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

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 类中,我重写了一个名为 getFilms() 的方法并返回 null 以模拟调用某些 API 时返回 null 作为数据的情况。


一个问题

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

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

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

【问题讨论】:

    标签: flutter testing mocking mockito flutter-test


    【解决方案1】:

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

    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); 
      });
    }
    

    【讨论】:

    • 不错的解决方案,顺便说一句,我已经检查过了,您可以在 getFilms 中简单地返回 null - 不需要 Future.value。我很快就会将您的帖子标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-27
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多