java - 使用 junit 测试同步 api

标签 java android multithreading junit

我正在尝试测试来自 Android 库的一组 API。其中一个 api 是同步方法,它在调用状态后立即返回。但在内部,该方法将创建很少的线程来执行一些后台任务。

这里我写一个junit测试用例来测试这个api,我的测试用例调用api然后结束测试。我需要让我的测试用例等待一段时间,直到由该 api 创建的线程也完成其任务。

当尝试 thread.sleep() 时,junit 会暂停线程,并且没有任何进展。

如何让我的 junit 测试用例等待测试方法创建的其他线程完成?

最佳答案

您可以通过设置自定义后台执行程序来测试这些类型的调用。这将导致所有线程按顺序在同一线程上执行,并允许您使用 junit 来测试这些操作。

像这样创建一个假的执行器类:

public class FakeExecutor implements Executor {
    @Override
    public void execute(Runnable runnable) {
        runnable.run();
    }
}

在测试前调用或刚开始时在测试中设置假执行器:

BackgroundExecutor.setExecutor(new FakeExecutor());

关于java - 使用 junit 测试同步 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18874371/

相关文章:

java - 当线程条件为 true 时,内部是否可以进行时间检查

c - openmpi:如何在根线程和随机(最快)的其他线程之间接收和发送数据?

java - Java 中的数字包装类

java - XMPP 服务器。如何打开 TLS 连接?

android - 您如何将 EditText 键盘设置为仅包含 Android 上的数字?

java - 如何在 Firebase 身份验证中反复检查用户是否通过验证?

php - 高优先级齿轮工作业未被视为高优先级

java - ProgressDialog Android AsyncTAsk

java - Java nanoTime 的多线程

Android Renderscript 3 维向量