gpt4 book ai didi

java - 带有注释的单元测试 Controller

转载 作者:行者123 更新时间:2023-11-30 07:36:11 28 4
gpt4 key购买 nike

我正在尝试在 Spring MVC 网络应用程序中为我的 Controller 编写一些单元测试。我已经为域模型获得了一套相当全面的单元测试,但为了完整起见,我也想测试 Controller 。

我面临的问题是在不加载 Spring 上下文的情况下尝试测试它们。我以为我可以通过模拟来解决这个问题,但是 Controller 中的方法有一个 @Transactional 注释,它试图打开一个事务(并且失败并返回 NullPointerException,因为没有加载 Spring 上下文)。

代码示例:

public class UsersController {

@Autowired private UserManager userManager;

@Transactional
@RequestMapping(method = RequestMethod.POST)
public ModelAndView create(User user) {

userManager.save(user);

ModalAndView mav = new ModelAndView();
mav.addObject("user", user);
mav.setViewName("users/view");
return mav;
}

}

所以基本上我想在不加载上下文和实际持久化用户的情况下测试行为。

有人对我如何实现这一目标有任何想法吗?

干杯,

帽子

最佳答案

我想说 mock 是去这里的方式。除非加载了 Spring 上下文并指示配置基于注释的事务,否则 @Transactional 注释将无效。

确保您没有通过指定如下内容来指示 JUnit 在 spring 上下文中运行您的测试:

@ContextConfiguration(locations = "classpath:spring/ITestAssembly.xml")
@RunWith(SpringJUnit4ClassRunner.class)

为了防止混淆,我将单元测试(不在 spring 上下文中运行)保存在与集成测试不同的文件中。通常所有模拟都发生在单元测试中,而不是集成测试中。

关于java - 带有注释的单元测试 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3827101/

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