我必须做什么:
我必须用JMockit测试我的spring mvc。我需要做两件事:
问题:
为了应对第一项,我应该使用MockUp ;为了应对我应该使用@Mocked MyService 的第二项。据我所知这两种方法相互重叠。
我的问题:
我的代码:
@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;
}
};
}
}
答案 0 :(得分:2)
我不知道是什么让您觉得“应该使用”MockUp
用于某些事情,而在同一测试中使用@Mocked
代替其他内容。
实际上,您可以使用这两种API中的任何一种,因为它们都非常强大。但是,通常情况下,在给定的测试(或测试类)中只使用一个或另一个,不。
要验证给定模拟方法发生了多少次调用,可以在使用@Mock
时使用MockUp
注释的“invocations / minInvocations / maxInvocations”属性;或者使用@Mocked
时的“times / minTimes / maxTimes”字段。选择最符合您需求和测试风格的产品。例如,测试,请查看JMockit文档。