0

我创建了一个计时器类,并正在使用 junit4 对其进行测试。计时器通知另一类时间,然后激活一个方法。在测试时,我无法检查发送给观察者的值,因为编译器卡在用于计时器的始终循环中。这是计时器的测试和启动代码。

 public void testSimpleTimerAsThread() throws InterruptedException 
    { 
     SimpleTimer st = new SimpleTimer(1000); 
     st.start(); 
     Thread.sleep(250); // So we are 1/4th a second different 
     for (int x=0;x<5;x++) 
     { 
     assertEquals(x, st.getRound()); // assumes round starts at
     Thread.sleep(1000); // wait for the next time change
     } 
    }

public void start()
    {
        while (flag)
        {
            timeChanged();
            try
            {
                // Sleep for var seconds.
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            {
            }
        }
    }

谢谢您的帮助。

4

1 回答 1

0

SimpleTimer类中,您应该覆盖run()方法,而不是start().

假设SimpleTimerextends Thread,您已经覆盖了Thread实际创建和启动线程的方法,因此没有创建新线程,并且您的线程代码在您调用时在主线程中执行start(),这就是它挂起的原因。

于 2013-09-28T18:18:50.663 回答