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