Ara*_*ash 9 mockito dart flutter flutter-test dart-null-safety
Flutter 2 发布后,我将代码迁移到了sdk: '>=2.12.0 <3.0.0',现在所有代码都是“声音零安全”。但是我在使用 mockito 5.0.0 进行单元测试时遇到了错误
例如:
when(mockClient.login(any)).thenThrow(GrpcError.unavailable());
Run Code Online (Sandbox Code Playgroud)
之前还可以,但是现在,编译器在 下显示错误any,表明:
The argument type 'Null' can't be assigned to the parameter type 'LoginRequest'
我从 mockito repo阅读了这个链接,但我希望有一种更简单的方法来编写像以前一样具有“不可为空”参数的方法的测试。
小智 25
分配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
...
}
Run Code Online (Sandbox Code Playgroud)
来源: https: //github.com/dart-lang/mockito/issues/364
Pab*_*ito 10
请参阅此处的解决方案。您可以使用mocktail 包,这使它变得更容易。
使用mocktail,你的代码将变成
when(() => mockClient.login(any())).thenThrow(GrpcError.unavailable());
Run Code Online (Sandbox Code Playgroud)
any返回 null 并且不允许将 null 值传递给您的login方法。
这是 NNBD 的主要缺点,mocking 比以前不那么容易了。
| 归档时间: |
|
| 查看次数: |
2080 次 |
| 最近记录: |