gpt4 book ai didi

java - 为什么在对 Controller 类进行单元测试时使用 Spring Mockmvc

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:05 26 4
gpt4 key购买 nike

我看到我周围的人在 Controller 类的单元测试中使用 Spring MVC,这对单元测试的用途没有帮助。

单元测试应该测试 Controller 类的实际实现,这可以通过简单的 Junit 测试而不是使用 Spring Mock MVC 更准确地实现。

但是那么问题来了,那么Spring Mock MVC的真正用途是什么呢?你需要它做什么?

假设我有以下代码:

@Controller
@RequestMapping("/systemusers")
public class SystemUserController
{
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String getUser(final Model model)
{

// some logic to return user's details as json

return UserDetailsPage;
}
}

我可以用 Junit 比用 Spring Mock MVC 更准确地测试这个类/ Controller (它所做的只是生成一些可以用 junit 断言的 json)。

我还可以使用 Spring Mock MVC 进行测试,例如使用正确的端点返回正确的 HTTP 状态和正确的响应页面字符串。

但这是否意味着我们正在测试 Spring MVC 的功能而不是被测方法的实际代码?

附言:我将代码保持在最低限度,我认为这足以解释我的问题。假设没有编译错误。

最佳答案

当涉及到 Controller(或任何公开的端点)类的单元测试时,我们将验证两件事:

(1) Controller 的实际逻辑本身是独立的,即是否调用正确的服务调用等。

(2) Request URL mapping and Response status & object

上面的项目 (1) 是我们对所有其他类(如服务、实用程序类等)进行的一般测试。

Item (2) 需要针对已暴露的端点( Controller 类)进行额外的覆盖/测试,因此无论我们使用 Spring 的 MockMVC 还是其他机制来做到这一点,这真的取决于我们。

Spring 的 MockMVC 确实帮助我们启动了内存中的 servlet 容器 & 检查正确的 Controller 方法被调用 & 然后正确的响应已经出来。

根据我的个人经验,测试 Controller (针对项目 (2))帮助我解决了 URL 映射冲突问题(当然,在同一个 Controller 内)等。直接而不是在后期修复它们项目。

关于java - 为什么在对 Controller 类进行单元测试时使用 Spring Mockmvc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43138249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com