当前位置: 首页 > 知识库问答 >
问题:

为什么mockMVC和mockito不一起工作?

孟开宇
2023-03-14

@Before
public void setup() throws Exception {
    this.mockMvc = webAppContextSetup(webApplicationContext).build();

    adminDao = mock(AdminDaoImpl.class);
    adminService = new AdminServiceImpl(adminDao);
}

@Test
public void getUserList_test() throws Exception {
    User user = getTestUser();
    List<User> expected = spy(Lists.newArrayList(user));

    when(adminDao.selectUserList()).thenReturn(expected);


    mockMvc.perform(get("/admin/user"))
        .andExpect(status().isOk())
        .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
        .andExpect(jsonPath("$", hasSize(1)))
        ;           
}

服务被调用,但我的问题是这行代码

when(adminDao.selectUserList()).thenReturn(expected);

不起作用,我的意思是它真的调用了adminDao。选择方法,从而从数据库中获取结果。这是我不想要的。你知道如何模拟方法调用吗?

共有2个答案

徐丰茂
2023-03-14

不要创建单独的TestContext类,而是使用@MockBean注释。

 @MockBean
 AdminDao adminDao;

然后根据需要使用。

 @Test
public void getUserList_test() throws Exception {
   User user = getTestUser();
   List<User> expected = spy(Lists.newArrayList(user));

   when(adminDao.selectUserList()).thenReturn(expected);


   mockMvc.perform(get("/admin/user"))
    .andExpect(status().isOk())
    .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
    .andExpect(jsonPath("$", hasSize(1)))
    ;           
}
弓晔
2023-03-14

多亏了@M.Deinum,我解决了我的问题,我添加了一个TestContext配置文件:

@Configuration
public class TestContext {

@Bean
public AdminDaoImpl adminDao() {
    return Mockito.mock(AdminDaoImpl.class);
}

@Bean
public AdminServiceImpl adminService() {
    return new AdminServiceImpl(adminDao());
}       
}

然后在我的测试课上,我用

@ContextConfiguration(classes = {TestContext.class})

值得一提的是,在测试类的设置中,我需要重置mockedClass以防止泄漏:

@Before
public void setup() throws Exception {
    Mockito.reset(adminDaoMock);

    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
 类似资料:
  • 我在试着为Spock中的控制器写一个测试。 应用程序类只是Spring Boot最简单的配置(支持自动扫描)。它提供了一个with PasswordEncryptor。我想用提供模拟的bean替换应用程序中的这个bean。 没有注释,所以Spring不知道应该注入哪个bean。不幸的是,我不知道如何让Spring通过本地配置从应用程序中替换bean。

  • 输出: @InjectMocks没有注入任何内容,因为authManagement为null,因此出现了NullPointerException。有谁能帮我解决这个问题吗。

  • css在中不工作,但使用此css代码。我在css区域和html标记中首先编写,然后编写。为什么? CSS HTML

  • 在我的ReactJS项目中,我一直在使用AsyncWait和babel。我发现React setState有一个方便的用法,我只是想更好地理解它。考虑这个代码: 我的意图是让异步验证代码在组件更新后运行。它工作了!生成的控制台日志显示: 验证代码仅在handleChange更新状态并呈现新状态后运行。 通常,要在状态更新后运行代码,必须在this.set状态后使用回调。这意味着如果你想在handl

  • 我试图在RESTAPI中对登录和安全性进行单元测试,所以我尝试尽可能地模拟现实生活中的请求序列。 我的第一个要求是: (请参见pastebin上的完整类)。 我尝试在这里获取cookie,以便以后能够使用收到的CSRF令牌登录,但是数组是空的! 然而,如果我运行我的应用程序并调用 我确实得到了一个Set Cookie头,可以稍后使用该Cookie(和CSRF令牌)进行身份验证。 所以问题是:如何让

  • 将Scala的值类与Mockito mock(匹配器)一起使用会导致NullPointerException,请参见以下示例: 结果: 任何提示在这里可以做些什么?