【问题标题】:After migrating flutter code to null-safety, mock objects not accepting `any`将颤振代码迁移到空安全后,模拟对象不接受“任何”
【发布时间】:2021-06-09 11:04:53
【问题描述】:

Flutter 2 发布后,我已将我的代码迁移到 sdk: '>=2.12.0 <3.0.0',现在所有代码都是“可靠的 null 安全”。但是我在使用 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 存储库中阅读了 this link,但我希望有一种更简单的方法来为具有“不可为空”参数的方法编写测试,就像以前一样。

【问题讨论】:

  • 我下面的解决方案能解决您的问题吗?

标签: flutter dart mockito flutter-test dart-null-safety


【解决方案1】:

请参阅the solution here. 您可以使用 mocktail 包,它更容易。

有了 mocktail 你的代码会变成

when(() => mockClient.login(any())).thenThrow(GrpcError.unavailable());

【讨论】:

    【解决方案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
        ...
    }
    

    来源:https://github.com/dart-lang/mockito/issues/364

    【讨论】:

      【解决方案3】:

      any 返回 null 并且 null 值不允许传递给您的 login 方法。

      这是NNBD的主要缺点,模拟比以前容易得多。

      https://github.com/dart-lang/mockito/blob/master/NULL_SAFETY_README.md#problems-with-typical-mocking-and-stubbing

      【讨论】:

        猜你喜欢
        • 2021-08-07
        • 1970-01-01
        • 2021-07-27
        • 2020-06-18
        • 1970-01-01
        • 2021-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多