2010-05-13 2 views

ответ

8

@Rhys Это не тот JUnit4Mockery, заменяющий необходимость вызова assertIsSatisfied, сво JMock.class (в сочетании с @RunWith). Вам не нужно звонить assertIsSatisfied при создании регулярного Mockery.

JUnit4Mockery переводит ошибки.

По умолчанию исключения ожидания сообщается в JUnit, как ExpectationError, так, например, с помощью

Mockery context = new Mockery(); 

вы получите

unexpected invocation: bar.bar() 
no expectations specified: did you... 
- forget to start an expectation with a cardinality clause? 
- call a mocked method to specify the parameter of an expectation? 

и использование,

Mockery context = new JUnit4Mockery(); 

вас Получено

java.lang.AssertionError: unexpected invocation: bar.bar() 
no expectations specified: did you... 
- forget to start an expectation with a cardinality clause? 
- call a mocked method to specify the parameter of an expectation? 
what happened before this: nothing! 

JUnit4Mockery преобразовал ExpectationError в java.lang.AssertionError, с которым имеет дело JUnit. Чистым результатом является то, что он будет отображаться в вашем отчете JUnit как сбой (с использованием JUnit4Mockery), а не с ошибкой.

1

При использовании JMock с JUnit 4 вы можете избежать некоторого кода шаблона, воспользовавшись тестовым бегуном JMock. Когда вы это сделаете, вы должны использовать JUnit4Mockery вместо обычной Mockery.

Вот как вы структурировать тест JUnit 4:

@RunWith(JMock.class) 
public void SomeTest() { 
    Mockery context = new JUnit4Mockery(); 

} 

Основным преимуществом является то, что нет необходимости вызывать assertIsSatisfied в каждом тесте, она вызывается автоматически после каждого теста.

+0

Я думаю, что моя путаница тоже. – time4tea

0

еще лучше, за http://incubator.apache.org/isis/core/testsupport/apidocs/org/jmock/integration/junit4/JUnitRuleMockery.html использование @Rule и избежать @RunWith, которые вы, возможно, потребуется какой-то другой системы:

public class ATestWithSatisfiedExpectations { 
    @Rule 
    public final JUnitRuleMockery context = new JUnitRuleMockery(); 
    private final Runnable runnable = context.mock(Runnable.class); 

    @Test 
    public void doesSatisfyExpectations() { 
     context.checking(new Expectations() { 
      { 
       oneOf(runnable).run(); 
      } 
     }); 

     runnable.run(); 
    } 
} 
Смежные вопросы