junit mocking jmock

¿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 .