在 Flutter 2 发布后,我将我的代码迁移到 sdk: '>=2.12.0 <3.0.0'
,现在所有代码都是“声音零安全”。但是我在使用 mockito 5.0.0 进行单元测试时遇到了错误
例如:
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,但我希望有一种更简单的方法可以像以前一样为具有“不可为空”参数的方法编写测试。
答案 0 :(得分:3)
参见 the solution here. 您可以使用 mocktail 包,这使它变得更容易。
使用 mocktail,您的代码将变成
when(() => mockClient.login(any())).thenThrow(GrpcError.unavailable());
答案 1 :(得分:2)
A
return null 并且不允许将 null 值传递给您的 any
方法。
这是 NNBD 的主要缺点,模拟比以前容易得多。
答案 2 :(得分:2)
分配 Mock 对象时,它需要是 Mock 对象类型,而不是 BaseClass。
@GenerateMocks(MockSpec<ITransactionRepository>(as: #MockTransactionRepository),
)
void main()
{
....
ITransactionRepository baseObject = MockTransactionRepository(); // wrong
MockTransactionRepository mockObject = MockTransactionRepository(); // right
when(baseObject.method(any)); // results in compile error
when(mockObject.method(any)); // OK
...
}