【问题标题】:Junit, testing timer.schedule without relying on thread sleeping or timeJunit,在不依赖线程睡眠或时间的情况下测试 timer.schedule
【发布时间】:2016-06-25 23:48:30
【问题描述】:

我已经使用 TimerTask 和 Timer.schedule 实现了一个在一定时间后执行一些逻辑的方法。 我想使用 Junit 验证这种行为,但是,我想知道是否有更好的方法来测试它,而不使用线程休眠或测量时间。

谢谢。

【问题讨论】:

  • 如果不测量时间,就无法测试时间安排是否正确。
  • 不是直接答案,但您应该考虑在新代码中使用java.util.concurrent.ScheduledExecutorService 而不是java.util.Timer。另请参阅此问题:stackoverflow.com/questions/2213109/…
  • 当然可以在不启动线程或等待的情况下编写调度代码测试。相反,您可以模拟或伪造依赖项。真正的问题是你测量的时间相对于什么——基本上,如果任务立即执行,你的测试怎么知道会失败?把它假装出来,你就有了解决问题的办法。
  • 谢谢@DanielPryden,这很鼓舞人心,我会探索这个解决方案
  • 如果您需要从 Timer 或 ExecutorService 线程执行断言,请查看ConcurrentUnit

标签: java multithreading junit timer


【解决方案1】:

您可以使用“自己的线程”执行器服务来解决“多线程”问题。

您可以进一步测试某些 A 类将任务推送到此类服务中;并且您还可以使用单元测试来确保推送任务时使用的参数是您期望的。

换句话说:你真的不想使用单元测试来证明调度是有效的(假设你没有完全重新发明轮子并且你实现了你自己的调度......这是你根本不应该这样做)。您希望使用单元测试来证明您的代码正在使用现有的(经过良好测试的)框架以及您希望看到的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    相关资源
    最近更新 更多