我想测试我的弹簧mvc控制器。你如何使用弹簧的注射器来对控制器进行单元测试?
该控制器具有服务:
@Autowired
UserService userService
而且我的用户服务取决于(自动连接)我userDAO的和其他一些服务,如MongoDB的等
现在我想的业务逻辑中进行测试我的用户服务,但当然我想嘲笑我的UserDao和Mongodb等的回应。
如何正确设置我的单元测试?
我可以重新使用spring容器的xml文件,它包含所有我的bean等,还是我可以创建一个新的?(我假设我必须得到这里涉及的弹簧容器)
寻找一些指导,任何教程将不胜感激。
更新
我感到奇怪的是,我的春天控制器(即不从控制器实现)我可以访问我的私人varialbe手动设置我的服务,即:
@Controller
public class UserController {
@Autowired
UserService userService;
}
而且在我的单元测试,我可以这样做:
UserController controller = new UserController();
controller.userService = ....
但我UserService,其中有userDAO的自动装配,我无法访问userDao属性:
UserService userService = new UserServiceImpl();
userService.userDao = .... // not available
它是有道理的,因为它是私人的,但它是如何工作的我的控制器?
回复:更新,什么包控制器,服务,并在测试?如果测试在同一个包中,则它可以访问默认范围的属性。忽略访问修饰符不*不*使私有财产,而[包私有(http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)。 – 2012-01-02 15:26:10
我有他们在同一个包。啊,我明白了,我认为这是私人的。我想知道为什么IntelliJ在重构期间默认情况下使字段私有。所以我应该把它们作为私人包裹呢? – Blankman 2012-01-02 15:31:15
没有“应该”,它只取决于。我唯一关心包私有的问题是,你仍然可能无意中访问某些东西;我倾向于保持私事和使用制定者,但是meh。 – 2012-01-02 15:32:31