【发布时间】:2013-07-18 21:19:25
【问题描述】:
我有一个像这样的 Bean 结构(但有更多级别):
@Controller
public class MyController {
@Autowired
private MyService myService;
}
@Service
public class MyService {
@Autowired
private MyDao myDao;
}
@Repository
public class MyDao {
}
我想用MockMvc 对MyController 进行单元测试。如果我创建一个创建MyController 实例的上下文,它需要一个MyService 实例进行注入,它需要一个MyDao 实例,依此类推。即使我嘲笑MyService 喜欢(无组件扫描)
@Bean
public MyController myController() {
MyController controller = new MyController ();
return controller;
}
@Bean
public MyService myService() {
return Mockito.mock(MyService.class);
}
Spring 将在MyService 中看到MyDao 的@Autowired,并尝试在上下文中找到一个。它显然会失败并抛出异常。我可以为我的每个班级创建一个包含模拟的上下文,但我不想这样做。
有什么方法可以告诉 Spring 不要注入 bean 的字段,或者用另一种方法简单地在我的控制器中注入我需要的一个 mock,以便使用 MockMvc 进行测试?
【问题讨论】:
标签: java spring spring-mvc junit mockito