My TEST创建一个SimpleTimer实例,其中1000作为毫秒量度,将线程延迟1秒。
@Test
public void testSimpleTimerAsThread() throws InterruptedException
{
SimpleTimer st = new SimpleTimer(1000);
st.start();
Thread.sleep(250);
for(int x = 0; x<5; x++)
{
assertEquals(x, st.getRound());
Thread.sleep(1000);
}
}
我的方法
timeChanged()只更新整数,并呼吁所有观察者更新他们的时间。
public void start()
{
for(int r = 0; r<5; r++)
{
try
{
timeChanged();
Thread.sleep(1000);
}
catch (InterruptedException e)
{
}
}
}
SimpleTimer扩展了Thread并实现了一个并没有真正搞乱这段代码的接口。
当我运行这个时,我得到java断言错误,说它预期为0但是为5,所以x从不递增,并且该回合增加了5。
答案 0 :(得分:0)
你的SimpleTimer
与其他人在同一个线程中工作,所以当你调用st.start()
时会发生什么事情直接在那里执行所有事情,然后执行其余的测试。您需要将所有SimpleTimer
逻辑放在run
方法而不是start
方法中并完全删除start方法,Thread类已经以正确的方式实现了它(但保持对{的调用{1}},没关系,这就是你如何开始一个新的线程)。但即便如此,它也不会按预期工作,但这实际上是并发问题,而不是错误。我的意思是,由于延迟,它有可能会有效(仅有时,并非总是如此),但依赖延迟,它并不是一个好主意。