我有一个REST控制器:
package com.company.rest;
@RestController
@RequestMapping("/v1/orders")
public class OrderController {
@Autowired
private OrderService orderService;
...
成为OrderService
的实现:
package com.company.service.impl;
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private MessageService messageService;
...
以及 MessageService
的实现:
package com.company.service.impl;
import org.springframework.mail.javamail.JavaMailSender;
@Service
public class MessageServiceImpl implements MessageService {
@Autowired
public JavaMailSender emailSender;
...
这在开发环境下效果完美,但我有一个针对 OrderController
的单元测试(基于此教程):
package com.company.test;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AdminApplication.class)
@WebAppConfiguration
public class OrderTest {
private MockMvc mockMvc;
@Autowired
private OrderService orderService;
...
这导致:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.mail.javamail.JavaMailSender' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
为什么这个依赖在生产环境中能够被满足,但在测试中却不能?我需要怎么做才能让这个单元测试成功地注入(或模拟)一个JavaMailSender
实现?