我正在尝试在 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
可用”。
我怀疑我可能需要特定的测试配置才能使用该服务,但是我对现有的在线文献完全感到困惑。
有指针吗?
答案 0 :(得分:2)
如docs所指出的,在咨询了jonsharpe(一开始我没有正确阅读)之后,我设法解决了一个可行的解决方案:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class MyControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private MyRepositoryInterface myRepository;
// no need to reference the service explicitly
// ... tests follow
}
以上内容在加载完整的应用程序配置时检索服务,并且仅按照指示来模拟存储库。
我可能会写一个临时配置来更好地满足要求,但这已经可以“即开即用”地工作了。