2015-03-04 2 views
0

Я хочу позвонить в allowing() несколько раз и предоставить отличный результат. Но я обнаружил, что первая спецификация allowing() поглощает все вызовы, и я не могу изменить возвращаемое значение.jMock - разрешает() вызов несколько раз с разными результатами

@Test 
public void example() { 
    timeNow(100); 
    // do something 

    timeNow(105); 
    // do something else 
} 

private void timeNow(final long timeNow) { 
    context.checking(new Expectations() {{ 
     allowing(clock).timeNow(); will(returnValue(timeNow)); 
    }}); 
} 

Если изменить allowing(clock) к oneOf(clock) он работает отлично. Но в идеале я хочу использовать allowing() и не переопределять, что часы вызывают только один раз. Есть ли способ сделать это?

+0

Если бы вы использовали Mockito, это было бы легко. укажите ... С jmock, хотя, не знаю, извините – fge

+0

Mockito's гибкий, но я на самом деле нахожу jnock's perricketiness полезным нормально: если это трудно сделать в jMock, это означает, что ваш дизайн плох. В этом случае, я думаю, что мой дизайн в порядке, и jMock меня подвела. :( –

ответ

1

Я рекомендовал бы взглянуть на states - они позволяют изменить который ожидание использовать, основываясь на том, что «состояние» тест в

@Auto private States clockState; 
@Test 
public void example() { 
    clockState.startsAs("first"); 
    timeNow(100); 
    // do something 

    clockState.become("second"); 
    timeNow(105); 
    // do something else 
} 

private void timeNow(final long timeNow) { 
    context.checking(new Expectations() {{ 
     allowing(clock).timeNow(); will(returnValue(timeNow)); 
     when(clockState.is("first")); 

     allowing(clock).timeNow(); will(returnValue(timeNow + 100)); 
     when(clockState.is("second")); 
    }}); 
} 
Смежные вопросы