【问题标题】:JMockit: @Mocke and MockUp combination in the same testJMockit:@Mocke 和 MockUp 组合在同一个测试中
【发布时间】:2013-09-12 16:30:26
【问题描述】:

我必须做什么:

我必须用 JMockit 测试我的 spring mvc。我需要做两件事:

  1. 重新定义MyService.doService方法
  2. 检查重新定义的MyService.doService方法被调用了多少次

什么问题:

为了应对第一个项目,我应该使用MockUp;为了处理第二个项目,我应该使用@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;
            }
        };
    }
}

【问题讨论】:

    标签: jmockit spring-test-mvc


    【解决方案1】:

    我不知道是什么给了您这样的印象,即在同一测试中您“应该”将MockUp 用于某事,而将@Mocked 用于其他某事。

    事实上,您可以使用这两种 API 中的任何一种,因为它们都非常强大。但是,通常情况下,在给定的测试(或测试类)中只使用一个或另一个,不会同时使用。

    要验证给定模拟方法发生了多少次调用,您可以在使用MockUp 时使用@Mock 注释的“invocations/minInvocations/maxInvocations”属性;或使用@Mocked 时的“times/minTimes/maxTimes”字段。选择最能满足您的需求和测试风格的那个。例如测试,请查看 JMockit 文档。

    【讨论】:

      猜你喜欢
      • 2015-02-27
      • 1970-01-01
      • 2014-09-14
      • 2015-12-24
      • 2020-02-21
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多