2014-02-12 3 views
2

엘리베이터를 시뮬레이트하는 테스트중인 시스템이 있습니다. 엘리베이터가 특정 층에 도착하는지 여부를 테스트하고 있습니다. 이것은 내 테스트 코드입니다 :Thread.sleep을 포함한 JUnit 테스트 메소드

이제
int chosenFloor=r.nextInt(6)+6; 
    lc.moveLift(0, chosenFloor); //moving lift 0 to the chosen floor 
    open=false; 
    floor=chosenFloor; 
    moving=false; 

    assertEquals(floor, lc.getLifts()[0].getFloor()); 

이 코드 조각을 호출 moveLift 방법 :

lift.setMoving(true); 

    int fromFloor = lift.getFloor(); 
    setLiftFloor(fromFloor); 
    lift.setMoving(true); 

    if (toFloor > fromFloor) { 

     for (int i = fromFloor; i < toFloor; i++) { 
      animateUp(i); 
      lift.setFloor(i); 
     } 

    } else { 

     for (int i = fromFloor; i > toFloor; i--) { 
      animateDown(i); 
      lift.setFloor(i); 
     } 

    } 

그리고 animateUp이 메소드를 호출합니다 : 당신이 볼 수 그래서

int lower = currentFloor * animationStepsPerFloor; 
    int upper = lower + animationStepsPerFloor - 1; 

    for (int i = 0; i < animationStepsPerFloor; i++) { 
     try { 
     Thread.sleep(50); 
      } catch (Exception e) { 
     e.printStackTrace(); 
      } 
     lower++; 
     upper++;} 

을 시간은 중요한 요소입니다. 지금 현재 시험 중일 때 승강기가 움직이지 않습니다. 리프트가 움직일 때까지 기다려야한다는 것이 분명합니다. 테스트 케이스에서 어떻게 할 수 있습니까? Thread.sleep을 테스트 케이스에 넣으려고했지만 쓸모가 없다.

답변

0

리프트가 움직일 때까지 기다려야한다는 것은 분명합니다. 테스트 케이스에서 어떻게 할 수 있습니까? Thread.sleep을 테스트 케이스에 넣으려고했지만 쓸모가 없다.

일반적으로 나는 전체 방법에 timeout를 사용 미묘한 타이밍 경쟁 조건이 다음 내가 스핀 루프 조건이 발생하기를 기다리고있는 것들에 단위 테스트를하고있는 중이 야 할 때.

@Test(timeout = 10000) 
public void testSomeTimingIssue() throws Exception { 
    while (!elevatorMoved) { 
     // test elevator 
     Thread.sleep(50); 
    } 
} 
관련 문제