2015-03-30 2 views
0

У меня есть класс, который простирается от Thread и хочу, чтобы JUnit проверил его. На этом этапе я не хочу проверять безопасность потоков, но просто проверить, работает ли логика реализации. Моя проблема заключается в том, что метод запуска перебирает на неопределенный срок, например .:Элегантное решение для тестирования метода запуска JUnit в реализации Thread

 public void run() { 

     while (status.isRunning()) { 

      // do stuff & sleep 
     } 
    } 

Для целей моего теста, я только хочу, чтобы перебрать логики в методе run один раз. Лучшее, что я придумал, чтобы решить эту проблему, является Mockito фиктивный объект, который использует статический счетчик и анонимную реализацию Ответ:

private static int counter = 0; 

    Status status = mock(Status.class); 
     when(status.isRunning()).thenAnswer(new Answer<Boolean>() { 
      public Boolean answer(InvocationOnMock invocation) throws Throwable { 
       if (counter == 0) { 
        counter++; 
        return Boolean.TRUE; 
       } 
       return Boolean.FALSE; 
      } 
     }); 

Я не уверен, это решение, является ли лучшее, что есть. Похоже, что это слишком длинный вариант для общего использования.

Может ли кто-нибудь подумать о более простом, более элегантном решении проблемы?

ответ

0

Вам не нужно делать ничего магического, просто дать больше, чем один «ответ» в методе «thenReturn», например ...

when(status.isRunning()).thenReturn(true, false); 
Смежные вопросы