Как убирать издевательства в весенних тестах при использовании Mockito

Я довольно новичок в Мокито и у меня проблемы с уборкой.

Я использовал JMock2 для модульных тестов. Насколько я знаю, JMock2 сохраняет ожидания и другую ложную информацию в контексте, который будет перестроен для каждого метода тестирования. Поэтому каждый метод испытаний не мешает другим.

Я использовал ту же стратегию для весенних тестов при использовании JMock2, я обнаружил потенциальную проблему со стратегиями, которые я использовал в своемПочта: Контекст приложения перестраивается для каждого метода тестирования и поэтому замедляет всю процедуру тестирования.

Я заметил, что многие статьи рекомендуют использовать Mockito в весенних тестах, и я хотел бы попробовать. Это работает хорошо, пока я не напишу два метода тестирования в контрольном примере. Каждый тестовый метод проходил, когда он запускался один. Один из них не выполнялся, если они запускались вместе. Я предположил, что это потому, что информация о макете была сохранена в самом макете (потому что я не вижу такого объекта контекста, как в JMock), и макет (и контекст приложения) используется в обоих методах тестирования.

Я решил это, добавив reset () в методе @Before. Мой вопрос: как лучше всего справиться с этой ситуацией (Javadoc reset () говорит, что код - это запах, если вам нужна reset ())? Любая идея ценится, спасибо заранее.

@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(...);

}

Ответы на вопрос(4)

Ваш ответ на вопрос