Ant*_*ony 3 java spring unit-testing dao
我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,大多数逻辑都与数据库相关.那么我该如何进行单元测试呢?我想通过模拟HTTPServletRequest其中的几个请求变量进行单元测试.
我的问题是:
我很欣赏任何展示如何真正实现这一目标的书/文章.
您向我们展示的代码不足以完全回答您的问题.
setDao((MyDAO) ApplicationInitializer.getApplicationContext().getBean("MyDAO"));
Run Code Online (Sandbox Code Playgroud)
这是最难的一行,因为它使用静态方法.我们需要看看它是如何ApplicationInitializer工作的.在理想世界中,该getApplicationContext()方法应该返回模拟ApplicationContext.这种模拟轮流应返回MyDAO时getBean("MyDAO").mockito完全有能力处理这个,以及所有其他模拟框架.
setUserPrincipal(); //fetches attribute from request and stores it in a var
Run Code Online (Sandbox Code Playgroud)
请求来自哪里?是否注入了动作类?如果是这样,只需注入模拟的请求对象,例如MockHttpServletRequest.
setGroupValue(); //
Run Code Online (Sandbox Code Playgroud)
和上面一样?请提供更多详细信息,这种方法实际上做了什么?
setResults(getMyDao().getReportResults(getActionValue(), getTabName());
Run Code Online (Sandbox Code Playgroud)
您之前创建的模拟应该在getReportResults()使用给定参数调用时返回一些内容.
setFirstResultSet((List) getResults()[0]);
setSecondResultSet((List) getResults()[1]);
Run Code Online (Sandbox Code Playgroud)
我想下面的方法在action类上设置了一些字段.因为您可以完全控制从模拟返回的内容getReportResults(),所以这不是问题.
return SUCCESS;
Run Code Online (Sandbox Code Playgroud)
您可以断言是否SUCCESS是执行结果.
如何伪造/模拟请求变量,就好像它来自浏览器一样
如上所述,Spring中有一个内置的模拟器.
我的单元测试应该调用实际的DAO并确保数据回来吗?
如果您的单元测试称为真正的DAO,则它不再是单元测试.这是一个集成测试.
如果是这样,我怎么能从单元测试中调用DAO,因为DAO绑定到服务器,因为jndi池设置驻留在应用程序服务器上.
这意味着您正在进行集成测试.在这种情况下,您应该使用像h2这样的内存数据库,这样您仍然可以在ci服务器上运行测试.您必须以某种方式配置您的应用程序DataSource从不同的地方获取.
从本质上讲,你应该向Struts动作类注入所有内容的模拟.你可以告诉mocks在调用时返回任何值.然后,在调用之后execute(),您可以验证调用的给定方法,字段集和结果值是否正确.考虑将其拆分为多个测试.
MyDAO您的action类.第一行变得过时了.| 归档时间: |
|
| 查看次数: |
570 次 |
| 最近记录: |