【问题标题】:How can I write unit tests for classes using LocalBroadcastManager?如何使用 LocalBroadcastManager 为类编写单元测试?
【发布时间】:2018-05-01 13:00:28
【问题描述】:

我们编写单元测试的正常方式是通过 Mockito 使用 mocks。然而,LocalBroadcastManager,出于某种莫名其妙的原因,是 final - 从而阻止 Mockito 扩展它,从而阻止我们 mock/spy 它...

--> 如何为包含 LocalBroadcastManager 的类编写单元测试?

例如,我想检查当某些情况发生时,某些广播(包含特定附加内容)是否已发送出去。

【问题讨论】:

    标签: android unit-testing mocking mockito localbroadcastmanager


    【解决方案1】:

    使用 PowerMock:

    使用 PowerMock 运行您的测试类:

    @RunWith(PowerMockRunner.class) 
    @PrepareForTest({LocalBroadcastManager.class})
    

    然后,无论您要在测试中的何处模拟静态方法,都可以这样做:

        PowerMockito.mockStatic(LocalBroadcastManager.class);
        LocalBroadcastManager instance = mock(LocalBroadcastManager.class);
    PowerMockito.when(LocalBroadcastManager.getInstance(context)).thenReturn(instance);
    

    【讨论】:

    • 当我调用 PowerMockito.mockStatic(LocalBroadcastManager.class) 时出现错误:无法子类化最终类类 android.support.v4.content.LocalBroadcastManager
    • 确保在课堂上执行此操作:@RunWith(PowerMockRunner.class) @PrepareForTest({LocalBroadcastManager.class})
    • 那行得通:D您能否更新答案以使其对其他人更清楚?谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2012-01-06
    • 2019-03-17
    • 2016-04-02
    相关资源
    最近更新 更多