如何使用Java中的Mockito对与时间相关的状态机进行单元测试

时间:2014-11-28 08:27:07

标签: java mockito

我写了一个名为ErrorHandingFiniteStateMachine的类,基本上做了类似的事情:

https://developers.google.com/safe-browsing/developers_guide_v3#RequestFrequencyHashes

基本上它有一个名为ErrorHandlingFiniteStateMachine.update()的函数,当调用者类收到错误时将调用它。然后它将更新错误状态,这取决于:

  • 收到了多少错误;
  • 自上次错误以来已经过了多长时间;
  • 当然还有最后一个错误状态。

现在我的问题是:

  1. 如何模拟mockito中经过的时间,因为时间可能很长,例如几小时,我绝对不想等几个小时才能完成单元测试。
  2. 是否有任何标准教程或最佳实践来测试具有时间相关功能的状态机?
  3. 修改

    正如大家所指出的,我使用System.currentTimeMillis来记住当前的时间戳。但顺便说一句,单元测试不应该知道有关实现的详细信息,对吗?

    我的解决方案

    我最终将System.currentTimeMillis()包裹在ErrorHandlingFiniteStateMachine.getCurrentTimestamp()中,并将其设为包私有(无修饰符),因此可以在TestErrorHandlingFiniteStateMachine中访问它。然后我使用mockito spy来模拟ErrorHandlingFiniteStateMachine.getCurrentTimestamp()

0 个答案:

没有答案