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

How can I use Mockito's verify on code running in Looper.getMainLooper?

给定这段代码:

    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.

有人可以指出我可以做些什么来实现这一点而不会出错吗?

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

你有两种可能:

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