2012-05-18 7 views
1

Предположим, что у меня есть следующий метод:Изменить макет возврата объекта значение динамически

public void runLoop(SomeIterator it){ 
    while(it.hasNext()){ 
     //do something 
    } 
} 

Теперь я хочу перейти в SomeIterator Мока объект, который будет возвращать Boolean.TRUE, чтобы идти в петлю, но я также хочу его для возврата Boolean.FALSE в некоторый момент (скажем, через 10 раз, например), есть ли способ сделать это с PowerMock/EasyMock?

Заранее за вашу помощь.

+0

Почему ваш вопрос помечен EasyMock, если вы заинтересованы только в PowerMock? –

+0

Меня интересуют как на самом деле – snajahi

ответ

4

Вот отрывок из EasyMock documentation:

Изменение поведения для Same вызова метода

Также можно указать изменение поведения для метода. Методы времени , а также Возврат, и иThrow могут быть связаны цепью. В качестве примера, мы определяем voteForRemoval («Документ») в

  • возвращения 42 в течение первых трех вызовов,
  • кинуть RuntimeException в течение следующих четырех вызовов,
  • возвращение -42 раз.
expect(mock.voteForRemoval("Document")) 
    .andReturn((byte) 42).times(3) 
    .andThrow(new RuntimeException(), 4) 
    .andReturn((byte) -42); 
+0

Не думал об этом - определенно проще, чем IAnswer, если возвращаемое значение может быть отображено непосредственно в последовательность вызовов. – ptyx

+0

Большое вам спасибо – snajahi

1

Я не знаю powermock, что хорошо, но с EasyMock пути, чтобы сделать это .andAnswer() вместо .andReturn на вашем издеваться.

Псевдо код:

it.hasNext(); 
expectLastCall().anyTimes().andAnswer(
    new IAnswer<Boolean>(){ compute your return value } 
); 

 Смежные вопросы

  • Нет связанных вопросов^_^