java - Mockito when() 不工作

标签 java spring spring-boot mockito

我使用 Mockito 创建了一个测试用例。我想测试一个 Controller 。当调用 Controller 时,我想发回一个响应对象,并且不希望 Controller 内的代码执行。但是即使我使用了when( functionName).thenReturn(),它进入 Controller 代码。我在这里做错了什么?

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class MockitoController {

@Autowired
private WebApplicationContext webApplicationContext;

protected MockMvc mockMvc;

@SuppressWarnings("unchecked")
@Before
public void setup() {

    MyController myController = Mockito.mock(myController.class);

    ResponseView jsonResponse = new ResponseView();
    jsonResponse.setStatus(1);
    jsonResponse.setMessage("true");

    Mockito.when((myController.deleteMedia(Mockito.anyInt()))).thenReturn(jsonResponse);

    this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build();

}

@Test
public void deleteMediaMockito() throws Exception {

    RequestBuilder requestBuilder = MockMvcRequestBuilders.delete("/library/99")
            .accept(MediaType.APPLICATION_JSON);

    MvcResult result = this.mockMvc.perform(requestBuilder).andReturn();
    JSONObject jsonObject = new JSONObject(result.getResponse().getContentAsString());

    assertEquals(1, jsonObject.get("status"));
}
}

最佳答案

我会尝试包含您的模拟 Controller 的本地类。你的测试类中有类似的东西。这将注册您的模拟并覆盖应用程序上下文中的真实 MyController。

@Configuration
    public static class MyMockConfig {

        @Bean
        @Primary
        MyController myController() {
            Mockito.mock(MyController.class);
        }
    }

但我不相信您正在测试的东西有意义。 MockMvc 用于测试整个 Controller ,包括 requestMappings 等。

那么你为什么要 mock 它的一部分呢? Controller 是您的被测单元。尝试模拟掉它的依赖关系。

但是 - 我发布的代码仍然可以帮助将模拟注入(inject)到 spring bean 中。

关于java - Mockito when() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32757637/

相关文章:

java - @PostConstruct执行中@Value静态注解为null

java - 如何使用 liquibase 将数据库回滚到 Spring Boot 中的特定变更集 ID?

java - JPanel 和扩展 JPanel 的自定义类无法正确显示

java - Spring 4.1.6.RELEASE : @RequestParam defaultValue and required=false don't affect

java - 无法在 Spring 中自动连接我的身份验证过滤器中的服务

java - 使用 Spring MVC HandlerInterceptorAdapter 从 HttpServletResponse 记录响应正文 (HTML)

java - 如何使用 simple-spring-memcache 缓存集合或数组参数

java - 如何使用java代码发布jcr节点?

java - 尽管以表单形式发送 CSRF token ,但不支持 Spring Security CSRF 405 方法 POST

java - 将 application.properties 与 tomcat 容器的 .war 分开