首页 > 解决方案 > 我如何模拟 1 个依赖项并自动装配另一个?

问题描述

我的控制器中有 2 个依赖项:一个验证器和一个存储库。对于这个特定的测试,我想模拟验证器,但保留存储库(暂时)。在我以前的代码版本中,我的控制器只有 1 个依赖项(存储库),并且像这样的测试设置似乎会自动连接到正确的存储库中。

@Autowired
CreateShortUrlController createShortUrlController;

当我引入验证器依赖项时,我将测试设置更改为以下

@Autowired
UrlRepository repository;

@Mock
UrlValidator urlValidator = new UrlValidator();

CreateShortUrlController createShortUrlController = new CreateShortUrlController(repository, urlValidator);

现在,当我运行测试时,它说我的存储库为空。我能做些什么来保留在模拟其他依赖项的同时获取正确存储库的“魔力”吗?

标签: spring-bootdependency-injectionmockingmockitoautowired

解决方案


您需要熟悉@MockBean,并使用它(而不是@Mock)让spring 上下文知道您的模拟bean。

@Autowired
CreateShortUrlController createShortUrlController;

@MockBean
UrlValidator urlValidator;

推荐阅读