首页 > 解决方案 > 如何为 android 架构组件生命周期事件添加单元测试?

问题描述

我尝试为支持架构组件生命周期事件的函数添加单元测试。为了支持生命周期事件,我@OnLifecycleEvent为我的函数添加了注释,当该事件发生时我想做一些事情。

一切都按预期工作,但我想为该函数创建一个单元测试,以检查我的函数在预期事件发生时是否运行。

 public class CarServiceProvider implements LifecycleObserver {

    public void bindToLifeCycle(LifecycleOwner lifecycleOwner) {
        lifecycleOwner.getLifecycle().addObserver(this);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onClear() {
       Log.i("CarServiceProvider", "onClear called");
    }
 }

我试图模拟 LifecycleOwner 并创建新的 LifecycleRegistery 来更改生命周期观察者的状态,但我没有这样做。

如何测试onClear()状态更改时调用的函数?

标签: androidandroid-testingandroid-architecture-componentsandroid-architecture-lifecycle

解决方案


您应该能够使用LifecycleRegistry

您的测试将执行如下操作:

@Test
public void testSomething() {
  LifecycleRegistry lifecycle = new LifecycleRegistry(mock(LifecycleOwner.class));

  // Instantiate your class to test
  CarServiceProvider carServiceProvider = new CarServiceProvider();
  carServiceProvider.bindToLifeCycle(lifecycle);

  // Set lifecycle state
  lifecycle.handleLifecycleEvent(Lifecycle.Event.ON_STOP)

  // Verify that the ON_STOP event was handled, with an assert or similar check
  ...
}

如果您正在测试Lifecycle.Event.ON_DESTROY那么您可能需要在此之前调用handleLifecycleEvent(Lifecycle.Event.ON_CREATE)


推荐阅读