2013-09-12 3 views
1

Что я должен сделать:JMockit: @Mocke и макетом сочетание в том же тесте

я должен проверить мой Spring MVC с JMockit. Мне нужно сделать две вещи:

  1. переопределять MyService.doService метод
  2. Проверьте, сколько раз переопределены MyService.doService метод называется

чем проблема:

Чтобы справиться с первым предметом, I должен использовать MockUp ; чтобы справиться со вторым пунктом I следует использовать @Mocked MyService. Как я понимаю эти два подхода переопределяют друг друга.

Мои вопросы:

  1. Как переопределить метод MyService.doService и одновременно проверить, сколько раз она была вызвана?
  2. Возможно ли избежать смешивания поведения & основанные на состоянии подходы к тестированию в моем случае?

Мой код:

@WebAppConfiguration 
@ContextConfiguration(locations = "classpath:ctx/persistenceContextTest.xml") 
@RunWith(SpringJUnit4ClassRunner.class) 
public class MyControllerTest extends AbstractContextControllerTests { 

    private MockMvc mockMvc; 

    @Autowired 
    protected WebApplicationContext wac; 

    @Mocked() 
    private MyServiceImpl myServiceMock; 

    @BeforeClass 
    public static void beforeClass() { 

     new MockUp<MyServiceImpl>() { 
      @SuppressWarnings("unused") 
      @Mock 
      public List<Object> doService() { 
       return null; 
      } 
     }; 
    } 

    @Before 
    public void setUp() throws Exception { 
     this.mockMvc = webAppContextSetup(this.wac).build(); 
    } 

    @Test 
    public void sendRedirect() throws Exception { 
     mockMvc.perform(get("/doService.html")) 
       .andExpect(model().attribute("positions", null)); 

     new Verifications() { 
      { 
       myServiceMock.doService(); 
       times = 1; 
      } 
     }; 
    } 
} 

ответ

2

Я не знаю, что дал вам впечатление, что вы «должны использовать» MockUp для чего-то, в то время как с помощью @Mocked для чего-то еще в том же тесте.

Фактически вы можете использовать любой из этих двух API, так как они оба очень способны. Обычно, однако, только один или другой используется в данном тесте (или тестовом классе), не оба.

Чтобы проверить, сколько произошло вызовы к данному издевались методу, вы можете использовать «Invocations/minInvocations/maxInvocations» атрибуты @Mock аннотаций при использовании MockUp; или поля «times/minTimes/maxTimes» при использовании @Mocked. Выберите тот, который лучше всего удовлетворит ваши потребности и стиль тестирования. Например, тесты, проверьте документацию JMockit.