如何使用 mockito 测试空值?

Posted

技术标签:

【中文标题】如何使用 mockito 测试空值?【英文标题】:How to test nulls using 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() 的数据实际上是否为空,我做错了什么?

【问题讨论】:

【参考方案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。我很快就会将您的帖子标记为已接受。

以上是关于如何使用 mockito 测试空值?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mockito 和 junit 测试此功能?

如何使用 mockito 为以下代码编写 junit 测试?

单元测试如何使用 Mockito 模拟存储库

如何使用 Mockito 和 JUnit 在 Spring Boot 中测试 POST 方法

如何使用 Mockito 在单元测试中调用 AppCompatActivity onCreate

如何使用 Mockito 测试我的 DAO 方法?