Если запись модульного теста Java с насмешкой использования JMock, должна мы использовать
Mockery context = new Mockery()
или
Mockery context = new JUnit4Mockery()
Каково различие между этими двумя, и когда мы должны использовать который?
@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), а не как ошибка .
При использовании JMock с JUnit 4 вы можете избежать шаблонного кода, взяв преимущество средства запуска тестов JMock. При этом вы должны использовать JUnit4Mockery вместо обычного Mockery.
Вот как вы структурируете тест JUnit 4:
@RunWith(JMock.class)
public void SomeTest() {
Mockery context = new JUnit4Mockery();
}
Основное преимущество состоит в том, что нет необходимости вызывать assertIsSatisfied
в каждом тесте, он вызывается автоматически после каждого теста.