Bla*_*man 7 java junit spring easymock
我想测试我的spring mvc控制器.
控制器有一项服务:
@Autowired
UserService userService
Run Code Online (Sandbox Code Playgroud)
我的用户服务依赖于(自动装配)我的UserDao和其他一些服务,如mongoDb等.
现在我希望在我的UserService中测试业务逻辑,但是当然我想模拟来自UserDao和Mongodb等的响应.
如何正确设置单元测试?
我可以重新使用包含所有bean等的spring容器的xml文件,还是创建一个新的? (我假设我必须在这里涉及弹簧容器)
寻找一些指导,任何教程将不胜感激.
更新
我觉得奇怪的是,对于我的spring控制器(没有从Controller实现),我能够访问我的私有变量来手动设置我的服务,即:
@Controller
public class UserController {
@Autowired
UserService userService;
}
Run Code Online (Sandbox Code Playgroud)
在我的单元测试中,我可以这样做:
UserController controller = new UserController();
controller.userService = ....
Run Code Online (Sandbox Code Playgroud)
但是对于我自己的UserDao自动装配的UserService,我无法访问userDao属性:
UserService userService = new UserServiceImpl();
userService.userDao = .... // not available
Run Code Online (Sandbox Code Playgroud)
它是有意义的,因为它是私有的,但它如何为我的控制器工作?
Spring框架具有非常有趣的测试功能.您可以查看Spring参考指南.它甚至可以在您的JUnit测试类中提供DI.
@RunWith(SpringJUnit4ClassRunner.class)
// ApplicationContext will be loaded from "/applicationContext.xml" and "/applicationContext-test.xml"
// in the root of the classpath
@ContextConfiguration(locations={"/applicationContext.xml", "/applicationContext-test.xml"})
public class MyTest {
// class body...
}
Run Code Online (Sandbox Code Playgroud)
简而言之,您可以使用自己的applicationContext.xml,甚至可以定义一个新的仅用于测试.我个人使用另一个,因为我定义了另一个专用于测试目的的dataSource.
| 归档时间: |
|
| 查看次数: |
9693 次 |
| 最近记录: |