如何在Looper.getMainLooper中运行的代码上使用Mockito的验证?

时间:2018-10-04 20:25:28

标签: java android mockito powermockito

给出以下代码块:

    new Handler(Looper.getMainLooper()).post(new Runnable() {
        @Override
        public void run() {
            _view.displaySomething();
        }
    });

我想在单元测试中调用Mockito的verify(_view).displaySomething(),但收到以下错误:

java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked.

有人可以指出我该怎么做才能实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

这是测试与Android相关的类的常见问题,它们在运行纯JUnit测试时没有默认实现。

您有两种可能性:

  • 从Android框架中分离出逻辑-然后,您可以完美地测试所有内容。将框架与逻辑分开始终是一个好主意。这也是所有流行架构的主要目的之一,无论是MVP,MVVM还是MVI
  • Android Instrumented Test(使用Android JUnit运行器)运行测试-然后,Android sdk中的类可以按预期工作。缺点-您必须使用设备或仿真器,并且测试速度较慢。