2016-09-18 20 views
0

我的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

对于第一个assert等于,x = 0和round = 5是的,所以assert将失败。 – Pat

+0

轮= 5与我的假设timeChanged(){round + 1} – Pat

回答

0

SimpleTimer作品休息,所以当你调用st.start()会发生什么,它会直接进入并执行一切,然后执行其余的测试。你需要把所有的SimpleTimer逻辑放在run方法中而不是start方法中,并且完全删除启动方法,Thread类已经以正确的方式实现了(但是保持调用st.start(),没关系,这就是你如何启动一个新线程) 。但即使如此,它也不会按预期工作,但这实际上是并发问题,而不是错误。我的意思是它有一点可能性,它会工作(只是有时候,并非总是),因为延迟,但是依靠延迟这并不是一个好主意。

+0

实施,它通过。感谢您的知识和帮助。 – abcdabcdefef