¿Cuándo deberíamos usar Mockery vs JUnit4Mockery?
mocking jmock (3)
Al usar JMock con JUnit 4, puede evitar un código repetitivo aprovechando el corredor de prueba JMock. Cuando hagas esto, debes usar JUnit4Mockery en lugar de la Mockery normal.
Aquí es cómo se estructuraría una prueba JUnit 4:
@RunWith(JMock.class)
public void SomeTest() {
Mockery context = new JUnit4Mockery();
}
La principal ventaja es que no es necesario llamar a assertIsSatisfied
en cada prueba, se llama automáticamente después de cada prueba.
Si escribimos una prueba de unidad Java con burla usando JMock, ¿deberíamos usar
Mockery context = new Mockery()
o
Mockery context = new JUnit4Mockery()
¿Cuál es la diferencia entre los dos, y cuándo deberíamos usar cuál?
Mejor aún, por http://incubator.apache.org/isis/core/testsupport/apidocs/org/jmock/integration/junit4/JUnitRuleMockery.html use @Rule y evite @RunWith que puede necesitar para algún otro sistema:
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();
}
}
@Rhys No es el JUnit4Mockery
que reemplaza la necesidad de llamar a assertIsSatisfied
, es el JMock.class
(combinado con @RunWith
). No necesitarás invocar assertIsSatisfied
cuando crees una Mockery
regular.
El JUnit4Mockery
traduce los errores.
Por defecto, las excepciones de expectativa se informan en Junit como ExpectationError
, por ejemplo, usando
Mockery context = new Mockery();
obtendrás
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?
y usando,
Mockery context = new JUnit4Mockery();
obtendrás
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!
El JUnit4Mockery convirtió el ExpectationError a java.lang.AssertionError con el que JUnit trata. El resultado neto es que aparecerá en su informe JUnit como un error (usando JUnit4Mockery) en lugar de un error .