android - 如何为 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()
状态更改时调用的函数?
解决方案
您应该能够使用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)。
推荐阅读
- python - 没有名为“dtw”的包
- oracle-cloud-infrastructure - 一个始终免费的计算可以在一个月或一段时间内使用的免费网络带宽总量
- javascript - 以表格形式生成报告 - JS
- mongodb - MongoDB嵌入
- java - Apache Poi - Java-:如何使用 Apache POI 将包含空行的文本作为单独的段落添加到 Word 文档中?
- odata - 列表绑定未绑定到 XSODATA 服务的列表
- reactjs - 有没有办法转移客户端 React 状态/道具来完成后端快递(api 调用)
- bash - 如何在 bash 中创建未知数量的或运算符?
- java - 从excel运行前200个用户后如何退出浏览器并重新启动我的整个脚本?
- c# - 执行具有分层依赖关系的任务的不确定列表 C#