2015-05-14 3 views
9

Я смущен в отношении целей и различий между ожиданиями и проверками. Например.Ожидает ли избыток, если у меня есть проверки в моем тесте?

@Tested FooServiceImpl fooService; 
@Injectable FooDao fooDao; 

@Test 
public void callsFooDaoDelete() throws Exception { 
    new Expectations() {{ 
     fooDao.delete(withEqual(1L)); times = 1; 
    }}; 

    fooService.delete(1L); 

    new Verifications() {{ 
     Long id; 
     fooDao.delete(id = withCapture()); times = 1; 
     Assert.assertEquals(1L, id); 
    }}; 
} 

Прежде всего, пожалуйста, дайте мне знать, если этот тест плохо написан/продуман.

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

+0

Я изменил название, чтобы лучше отражать ваш вопрос в нижней части страницы. Если я неправильно понял вопрос, не стесняйтесь возвращать мои изменения. – Thunderforge

+0

Старая нить, я знаю, но мое понимание, свободно и кратко: блок «Ожидания» обрабатывает вещи, которые происходят _may_; блок 'Verifications' обрабатывает вещи, которые _ _ должны были произойти. –

ответ

12

Целью Expectations является проведение теста для записи ожидаемых результатов для издевающихся методов и/или конструкторов, если это необходимо для тестируемого кода.

Цель Verifications, чтобы позволить тест, чтобы проверить, как ожидается вызовы к издевался методов и/или конструкторов, так как сделаны кода при тестировании.

Таким образом, как правило, тест будет не как запись и проверить тот же ожидание (где «ожидание» задает набор вызовов для издевался методов/конструкторах, которые, как ожидается, произойдет, когда код тестируемой осуществляется).

Имея это в виду, например, тест будет выглядеть следующим образом:

@Tested FooServiceImpl fooService; 
@Injectable FooDao fooDao; 

@Test 
public void callsFooDaoDelete() throws Exception { 
    fooService.delete(1L); 

    new Verifications() {{ fooDao.delete(1L); }}; 
} 
+0

Я все еще не понимаю этого. В вашем примере вы могли бы достичь того же с блоком ожиданий, не так ли? Когда вам нужен блок Verifications? – T3rm1

+1

Вам нужно «блок проверки», если вы хотите написать тесты в соответствии с [«Упорядочить действие закона»] (http://c2.com/cgi/wiki?ArrangeActAssert) или [«Дано когда тогда»] (http: //martinfowler.com/bliki/GivenWhenThen.html). –

+0

@ Rogério Я понимаю этот ответ, но почему тогда вы можете установить проверку в блоке ожидания? например: 'times',' minTimes' и т. д. Какой сценарий будет использовать эти проверки в блоке ожиданий? – PDStat