我正在使用Struts2框架,并想对下面的execute
方法进行单元测试:
public String execute() {
setDao((MyDAO) ApplicationInitializer.getApplicationContext().getBean("MyDAO"));
setUserPrincipal(); //fetches attribute from request and stores it in a var
setGroupValue(); //
setResults(getMyDao().getReportResults(getActionValue(), getTabName());
setFirstResultSet((List) getResults()[0]);
setSecondResultSet((List) getResults()[1]);
return SUCCESS;
}
正如您所看到的,大部分逻辑都与数据库有关。那么我该如何进行单元测试呢?我想通过模拟一个HTTPServletRequest
并在其中添加一些请求变量来进行单元测试。
我的问题是:
- 我该如何伪造/模拟请求变量以及它从浏览器中发出的方式?
- 我的单元测试是否应该调用实际的DAO并确保数据返回正确?
- 如果是,则如何在单元测试中调用DAO?因为JNDI池设置驻留在应用程序服务器上,所以DAO与服务器绑定。
如果有任何可以真正展示如何完成此操作的书籍/文章,我将不胜感激。
setDAO()
方法中? - AnthonyMyDAO
接口都被模拟了。如果你正在进行集成测试,并且不能简单地切换到不同的数据库引擎-你需要一个Oracle测试数据库可用。这是有问题的,因为它必须对每个愿意运行集成测试的人都可用。此外,请不要在代码中硬编码JNDI。Spring能够从JNDI获取bean,在测试目的下,只需用本地数据源替换该单个bean即可。请开另一个问题,展示你如何获取DS并发布跟进。 - Tomasz Nurkiewicz