当前位置: 首页 > 知识库问答 >
问题:

使用robolectric获得UI线程的访问权

樊宏邈
2023-03-14

我在robolectric(Version1.1)测试案例中获取主UI线程时遇到了麻烦。我正在测试的应用程序方法中有以下检查:

if (Thread.currentThread() != Looper.getMainLooper().getThread()) {
            throw new IllegalStateException(
                    "This method should be called from the Main UI Thread");
        }
    }
    @Test
public void maTest() {

    Runnable task = new Runnable() {

        @Override
        public void run() {

            adapter.testThreadPrecondition();

        }
    };

    new Handler(Looper.getMainLooper()).post(task);
}

共有1个答案

罗心思
2023-03-14

将检查looper线程是否为当前线程的代码放入一个方法中,例如validaterunningonLooperThread()

然后,在单元测试中使用模拟框架,如Mockito来模拟该方法,使其返回成功。

 类似资料:
  • 我正在编写一个WPF表单应用程序,在其中我试图循环通过一个文件夹并实时显示其文件,使用异步等待方法。在我的任务中。运行()方法我正在引发我的事件,这会引发罚款,但是事件代码也会更新UI线程上的文本框,因此我UI线程错误 '调用线程无法访问此对象,因为另一个线程拥有它。' .有什么方法可以更改我的代码,以便我可以更新我的TextBox? 和我的事件处理程序代码

  • 我对平台有几个问题。稍后运行。我有一个JavaFX应用程序类。在这个类中,我运行一个线程(线程从网络套接字读取数据)。 现在,当我在线程中创建一个新的时,系统会抛出一个执行(JavaFX事件调度器线程和我的netork-read线程不一样)-我理解这种行为。 但另一方面,我将来自网络阅读器的文本附加到现有的文本区域,或者在列表视图中添加/删除一些项目 我的问题: JavaFX事件调度器线程何时引发

  • 获取访问攻击是网络渗透测试的第二部分。 在本节中,我们将连接到网络,这将使我们能够发起更强大的攻击并获得更准确的信息。 如果网络不使用加密,我们可以连接到它并嗅出未加密的数据。 如果网络是有线的,我们可以使用电缆并连接到它,可能通过更改我们的MAC地址。唯一的问题是攻击目标使用加密,如WEP,WPA,WPA2。 如果我们确实遇到加密数据,我们需要知道解密它的密钥,这在本章将会学习和实践。 如果网络

  • 问题内容: 我知道没有线程可以访问当前视图,除非它是UI线程。我想知道为什么?哪个线程更改视图为什么很重要?是出于安全原因吗?这是我使用的解决方法: 每当我想更改布局时,这样做都是一种痛苦。是否有其他解决方法?我了解异步任务,但从未找到一种使用它的好方法,它比我正在做的更好吗?所有相关的答案都适用! 问题答案: 是的,您的权利:为了安全起见,您不能在另一个线程上修改视图(这就是为什么将其称为UI线

  • 问题内容: 随着的发布,我一直在尝试一些新的API,其中之一是。 我注意到警告之一是针对。 这是警告: 并给出了在UI线程上进行的调用。 是否应该真正从UI线程进行访问和更改? 问题答案: 很高兴您已经在玩它! 注意事项:( 以懒惰的子弹形式) 如果这是您遇到的最严重的问题,则您的应用程序可能是个不错的选择。:)写操作通常比读操作慢,因此请确保使用的是SharedPreferenced $ Edi

  • 我不清楚的概念 Java Thread 在进入实例同步 java 方法时获取对象级锁,在进入静态同步 Java 方法时获取类级锁。 当它表示对象级锁定和类级锁定时,它意味着什么? 例如: 这里的getCount()将锁定Counter.class对象,而setCount()将锁定当前对象(this)。这是什么意思?这是否意味着当getCount()被调用时,另一个线程不能访问setCount(),