在Flutter 2发布之后,我已经将代码迁移到sdk: '>=2.12.0 <3.0.0'
,现在所有代码都是“sound null safety”。
例如:
when(mockClient.login(any)).thenThrow(GrpcError.unavailable());
之前没有问题,但现在,编译器在any
下显示错误,指示:The argument type 'Null' can't be assigned to the parameter type 'LoginRequest'
我从mockito repo中读到了this link,但是我希望有一种更简单的方法来为像以前一样带有“不可空”参数的方法编写测试。
5条答案
按热度按时间eni9jsuy1#
当分配Mock对象时,它需要是Mock对象类型,而不是BaseClass。
来源:https://github.com/dart-lang/mockito/issues/364
5m1hhzi42#
请参阅the solution here.您可以使用mocktail软件包,这使得它更容易。
使用mocktail,您的代码将变成
c90pui9n3#
any
返回空值,并且不允许将空值传递给login
方法。这是NNBD的主要缺点,嘲笑比以前容易得多。
https://github.com/dart-lang/mockito/blob/master/NULL_SAFETY_README.md#problems-with-typical-mocking-and-stubbing
i86rm4rw4#
处理mockito中的零安全
第1步:不要手动创建模拟类和实现,因此请删除它们
第2步:安装build_runner以使用dart代码生成文件
第3步:将
import 'package:mockito/annotations.dart';
添加到测试文件第4步:在
void main()
函数上面用@GenerateMocks([YourClassToBeMocked])
注解你要模拟的目标类第5步:运行build_runner来生成带有
--delete-conflicting-outputs
标志mock,因此在您的终端中键入:flutter pub run build_runner build --delete-conflicting-outputs
。启用此选项将跳过提示并删除文件。此选项通常应用于继续集成服务器和测试,但不应用于其他情况。步骤6:生成模拟文件后,将其导入到您的测试中(它位于测试文件的同一目录中),然后您就可以在where方法中使用
any
,并在类中使用一个不可空变量,即使没有实现它。完整答案请查看this link
lp0sw83n5#
在模拟类中调用的函数,使参数可为空。如果要模拟此类方法:
将String参数设为可为Null,如下所示:
希望能成功。