java - 有没有办法在不阻塞线程的情况下暂停单元测试

标签 java unit-testing playframework

我正在使用 play 1.2.4,并且正在尝试设置单元测试来测试作业。 我的作业每 2 秒运行一次,并根据某些条件更改某些对象的状态。这就是我用来执行此操作的方法。

@Every("2s")
public class GameScheduler extends Job {
    public void doJob(){
        //Fetch of object from db and status change based on conditions happens here
    }
}

现在在我的单元测试中,我设置了这些条件,但我希望测试在获取其中一个设置对象之前等待 3 秒,并对其状态执行断言 Equals 以查看工作是否...做得很好.

如果我使用

pause(3000);

或者类似的东西

try {
    Thread.sleep(3000);
} catch (InterruptedException e) {
    e.printStackTrace();
}

测试停止,但作业也停止。看起来工作和测试是在同一个线程上的。有没有办法在不停止工作的情况下暂停测试?类似 Controller 中的await()方法

最佳答案

您不需要测试调度程序,因为它应该可以工作(因为框架正在处理它)。您需要的只是测试 doJob 方法是否正在执行其工作。因此,只需编写一个这样的测试:

GameScheduler job = new GameScheduler();
job.doJob();

// assert whatever you want here

关于java - 有没有办法在不阻塞线程的情况下暂停单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8425912/

相关文章:

java - 类型变量如何允许类型错误?

java - 将大量排队数据写入文件时出现内存错误

android - 如何更好地在 Android 上对 Looper 和 Handler 代码进行单元测试?

android - Robolectric 测试未运行 (Android)

scala - 用列表 Play map 的scala json

java - 在特定条件下是否可以混合使用 hibernate-envers 版本?

c# - 使用 .net 成员(member)提供程序进行编程登录

intellij-idea - Intellij IDEA 无法使用 Play 框架解析符号

java - Grails 或 Play 如何检测更改和热重载类?

java - 即使存在,也不会调用重写的 Java 方法