如何使用 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 在 Spring Boot 中测试 POST 方法