【发布时间】:2014-09-24 21:36:02
【问题描述】:
我正在使用 struts2-junit-plugin 为 struts2 Web 应用程序编写测试用例,我的问题是在我的操作类中有一些使用数据源(jndi)的数据库相关查询 我如何在我的测试用例中模拟这个。
编辑
在这个测试中,我正在设置远程用户。
public void testexecute()
{
try
{
ActionProxy proxy = getActionProxy("/index");
IndexAction action = (IndexAction) proxy.getAction();
request.setRemoteUser("Haider");
assertTrue(action.execute().equals(ActionSupport.SUCCESS));
assertTrue(true);
}
catch(Exception ex)
{
assertTrue(false);
}
}
在 IndexAction(实现 PrincipalAware)中我有这个
public String execute()
{
try
{
if(principleProxy != null)
{
userModel = new UserModel();
userModel.setUserName(principleProxy.getRemoteUser());
}
else
{
return ERROR;
}
................................
.................................
}
在我运行测试时,in index ation principleProxy 为空。
【问题讨论】:
-
你应该在真实数据上编写测试用例,而不是伪造的数据源。
-
@RomanC 在我的动作类中,有一个函数可以获取网格数据,即返回对象列表,在该函数中,我使用数据源获取连接并查询数据库如何我将 jndi 提供给 InitContext 查找函数
-
那么问题是您的数据收集与 JNDI 资源的耦合过于紧密。抽象如何你检索你的数据,而不是在哪里。动作不应该有明确的实现,通过抽象你可以单独测试动作。
-
@DaveNewton,然后假设我将其移至另一个类,例如 classA { function getData(){...}} 并在操作类中调用该函数,现在情况相同跨度>
-
不,服务类将被注入到动作中。在单元测试期间,您注入返回已知数据的实现。如果您使用的是 JNDI 数据源,那么您正在执行集成测试,因为您正在测试多个移动部件。
标签: struts2 struts2-junit-plugin