【发布时间】:2018-12-22 19:49:24
【问题描述】:
我正在尝试在 Spring boot 2 中编写一个测试类,其中:
- 我想测试一个控制器
- 我想模拟一个存储库
- 我想按原样注入服务(即不模拟它)
这个类看起来像:
@RunWith(SpringRunner.class)
@WebMvcTest(MyController.class)
public class MyControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private MyRepositoryInterface myRepository;
@Autowired
private MyService myService;
// tests follow ...
}
MyService 的(唯一)实现使用@Service 进行注释,并允许通过其@Autowired 构造函数注入存储库:
@Service
public class MyActualService implements MyService {
private MyRepository repo;
@Autowired
public MyActualService(MyRepository repo) {
this.repo = repo;
}
// ...
}
我在运行测试时收到NoSuchBeanDefinitionException,大致说明“没有MyService 可用”。
我怀疑我可能需要特定的测试配置才能获得服务,但我对可用的在线文献感到完全困惑。
任何指针?
【问题讨论】:
-
根据the docs,自动配置明确“不是
@Component、@Service或@Repositorybeans”。 -
@jonrsharpe aHA。谢谢,正在调查。
-
@jonrsharpe 在实际阅读文档后解决了我的问题(咳咳)。您认为回答这个问题(使用一些子代码)可能有任何价值,还是您认为我应该删除?
-
我想你可以写出答案。
-
@jonrsharpe 欢呼,很快就会完成。
标签: spring spring-boot integration-testing