代码之家  ›  专栏  ›  技术社区  ›  Paul Reiners

检查JUnit测试用例中的超时

  •  4
  • Paul Reiners  · 技术社区  · 14 年前

    我有一个JUnit测试用例,我期望一个特定的方法调用花费很长时间(超过一分钟)。我想

    1. 进行方法调用。
    2. 确保方法调用至少需要一分钟时间,如果没有,JUnit断言将失败。
    3. 然后终止方法调用(假设它花费了超过一分钟的时间),因为这可能需要很长的时间。

    我该怎么做?

    1 回复  |  直到 12 年前
        1
  •  9
  •   Alvin    14 年前

    您可以编写一个实现runnable的类,该类围绕感兴趣的方法;假设允许生成线程。

    public class CallMethod implements Runnable
    {
       //time in milli
       public long getStartTime()
       {
         return startTime;
       }
    
       //time in milli
       public long getEndTime()
       {
         return endTime;
       }
    
       public void run()
       {
           startTime = ...;
           obj.longRunningMethod();
           endTime = ...;
       }
    }
    

    然后在你的JUnit中,你可以做如下的事情:

    public void testCase1()
    {
      CallMethod call = new CallMethod();
      Thread t = new Thread(call);
      t.start();
      t.join(60000); // wait one minute
    
      assertTrue(t.alive() || call.getEndTime() - call.getStartTime() >= 60000);
    
    }