2010-05-13 14 views

Respuesta

8

@Rhys No es el JUnit4Mockery que reemplaza la necesidad de llamar assertIsSatisfied, es el JMock.class (combinado con el @RunWith). No necesitará llamar al assertIsSatisfied cuando cree un Mockery normal.

El JUnit4Mockery traduce los errores.

Por defecto, se presentan excepciones expectativa en Junit como ExpectationError, así por ejemplo, el uso de

Mockery context = new Mockery(); 

obtendrá

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 usar,

Mockery context = new JUnit4Mockery(); 
que

Obtendrá

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 en un 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.

1

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 le gustaría estructurar una prueba JUnit 4:

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

} 

La principal ventaja es que no hay necesidad de llamar a assertIsSatisfied en cada prueba, se le llama de forma automática después de cada prueba.

+0

Creo que fue mi confusión también. – time4tea

0

Mejor aún, por http://incubator.apache.org/isis/core/testsupport/apidocs/org/jmock/integration/junit4/JUnitRuleMockery.html uso @Rule y evitar @RunWith que pueda 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(); 
    } 
} 
Cuestiones relacionadas