android - 如何为 android 架构组件生命周期事件添加单元测试?

标签 android android-testing android-architecture-components android-architecture-lifecycle

我尝试为支持架构组件生命周期事件的功能添加单元测试。为了支持生命周期事件,我为我的函数添加了 @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() 函数?

最佳答案

您应该能够使用 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)

关于android - 如何为 android 架构组件生命周期事件添加单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51099003/

相关文章:

android - WebView 不能与 loadUrl 一起使用,但可以与 loadData 一起使用

android-testing - 启动 Selendroid 服务器时发生错误

android - 使用 Dagger 2 提供一个空的 Providers 映射的 @Multibiding

安卓架构组件 : How to insert repository parameter

android - Kotlin 结构化并发 [协程] 模型是否适用于适合数据库写入的 UI?

android - 没有 Javascript 从移动 Web 到本地应用程序的 Facebook 共享?

android - 如何在 Android 中将谷歌地图标记颜色更改为灰色

android - 如何知道ViewPager在android中已经滚动了一半的屏幕

selenium-webdriver - 无法使用 Appium 1.6 从 Spinner 中选择一个选项

java - JUnit如何测试IntentService