【问题标题】:Mockito, how to return HTTP status from void method?Mockito,如何从 void 方法返回 HTTP 状态?
【发布时间】:2021-08-20 14:45:13
【问题描述】:

我用 @ResponseStatus 注释

    @PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void create(@RequestBody @Valid RestaurantCreationDTO restaurantCreationDTO,
                   BindingResult bindingResult) {
    if(bindingResult.hasErrors()) {
        throwExceptionIfBindingResultHasErrors(bindingResult);
    }
    restaurantService.create(restaurantCreationDTO);
}

但是我怎样才能用 mockito 测试这个方法呢?我想测试它是否返回 HttpStatus.CREATED。

【问题讨论】:

  • 它是静态的 - 硬编码 - 用 Mockito 测试它会很愚蠢。
  • 如果您根据资源创建的成功程度在 return 语句中以某种方式返回 http 状态,您将能够通过 Mockito 进行测试。根据您当前的代码剪断,它似乎几乎是多余的。
  • @vaibhavsahu 所以我能做的最好的就是测试服务是否被调用?
  • @KlausKöhler 是的,你可以使用 Mockito.verify(mockObject, times(1)).someMethod("was just called one time");

标签: java spring mockito


【解决方案1】:

例如,您将需要创建一个@WebMvcTest,以允许您测试 MVC 控制器。检查以下示例:

@RunWith(SpringRunner.class)
@WebMvcTest(YourRestController.class)
public class YourRestControllerTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void yourTest() throws Exception {
       mvc.perform(get("/api")
         .contentType(MediaType.APPLICATION_JSON))
         .andExpect(status().isCreated());
    }
}

更多详情请查看https://www.baeldung.com/spring-boot-testing#unit-testing-with-webmvctest

【讨论】:

  • 我已经做到了,但不能用 mockito 真正测试 void 方法
  • 您能否将您的测试代码添加到答案中?谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-01-12
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
相关资源
最近更新 更多