Comment nettoyer les simulacres lors des tests de printemps lors de l'utilisation de Mockito

Je suis assez nouveau à Mockito et avoir de la difficulté à nettoyer.

J'ai l'habitude d'utiliser JMock2 pour les tests unitaires. Autant que je sache, JMock2 préserve les attentes et les autres se moquer de l'information dans un contexte qui sera reconstruit pour chaque méthode de test. Par conséquent, chaque méthode de test n'est pas perturbé par les autres.

J'ai adopté la même stratégie pour le printemps des tests lors de l'utilisation de JMock2, j'ai trouvé un problème potentiel avec les stratégies que j'ai utilisé dans mon post: Le contexte de l'application est reconstruit pour chaque méthode de test et donc ralentit l'ensemble de la procédure de test.

J'ai remarqué de nombreux articles vous recommandons d'utiliser Mockito au printemps tests et je voudrais avoir un essai. Il fonctionne bien jusqu'à ce que j'écris deux méthode d'essai dans un cas de test. Chaque méthode de test passé quand il a couru seul, l'Un d'eux n'a pas si ils ont couru ensemble. J'ai spéculé que c'est parce que la fausse information a été préservée dans la maquette elle-même (car je ne vois pas l'objet de contexte, comme dans l'JMock) et la simulation(et le contexte de l'application) est partagé par les deux méthodes d'essai.

Je l'ai résolu en ajoutant reset() dans la méthode @before. Ma question est quelle est la meilleure pratique pour gérer cette situation (La javadoc de réinitialisation() dit que le code est l'odeur si vous avez besoin de reset())? Toute idée est d'apprécier, merci d'avance.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
    "file:src/main/webapp/WEB-INF/booking-servlet.xml",
    "classpath:test-booking-servlet.xml" })
@WebAppConfiguration
public class PlaceOrderControllerIntegrationTests implements IntegrationTests {

@Autowired
private WebApplicationContext wac;

private MockMvc mockMvc;

@Autowired
private PlaceOrderService placeOrderService;

@Before
public void setup() {
    this.mockMvc = webAppContextSetup(this.wac).build();

    reset(placeOrderService);//reset mock
}

@Test
public void fowardsToFoodSelectionViewAfterPendingOrderIsPlaced()
        throws Exception {

    final Address deliveryAddress = new AddressFixture().build();
    final String deliveryTime = twoHoursLater();
    final PendingOrder pendingOrder = new PendingOrderFixture()
            .with(deliveryAddress).at(with(deliveryTime)).build();

    when(placeOrderService.placeOrder(deliveryAddress, with(deliveryTime)))
            .thenReturn(pendingOrder);

    mockMvc.perform(...);

}

@Test
public void returnsToPlaceOrderViewWhenFailsToPlaceOrder() throws Exception {

    final Address deliveryAddress = new AddressFixture().build();
    final String deliveryTime = twoHoursLater();
    final PendingOrder pendingOrder = new PendingOrderFixture()
            .with(deliveryAddress).at(with(deliveryTime)).build();

    NoAvailableRestaurantException noAvailableRestaurantException = new NoAvailableRestaurantException(
            deliveryAddress, with(deliveryTime));
    when(placeOrderService.placeOrder(deliveryAddress, with(deliveryTime)))
            .thenThrow(noAvailableRestaurantException);

            mockMvc.perform(...);

}

source d'informationauteur Hippoom