有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用Mockito在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 安卓.os.Looper not mocked.

有人能告诉我,我能做些什么来做到这一点而不出错吗


共 (1) 个答案

  1. # 1 楼答案

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

    你有两种可能:

    • 将您的逻辑从Android框架中分离出来——这样您就可以完美地测试一切。将框架与逻辑分离总是一个好主意。这也是所有流行体系结构(无论是MVP、MVVM还是MVI)的主要用途之一
    • Android Instrumented Test(使用Android JUnit runner)的形式运行测试-然后来自Android sdk的类就可以按预期工作了。缺点-您必须使用设备或模拟器,并且测试速度较慢