首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMockit:@Mocke和MockUp在同一个测试中的组合

JMockit:@Mocke和MockUp在同一个测试中的组合
EN

Stack Overflow用户
提问于 2013-09-12 16:30:26
回答 1查看 1K关注 0票数 1

我必须做的事:

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

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

什么问题:

为了处理第一项,我应该使用MockUp;为了处理第二项,应该使用@ second 。据我所知,这两种方法是相互覆盖的,

我的问题:

  1. 如何覆盖MyService.doService方法,同时检查它被调用了多少次?
  2. 在我的情况下,有可能避免混合基于行为和状态的测试方法吗?

我的代码:

代码语言:javascript
复制
@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;
            }
        };
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-13 19:28:14

我不知道是什么给您的印象,您“应该使用”MockUp的东西,而使用@Mocked的其他东西在同一测试。

实际上,您可以使用这两个API中的任何一个,因为它们都非常有能力。但是,通常情况下,在给定的测试(或测试类)中只使用其中一种,而不是两者都使用。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18769669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档