【问题标题】:Creating database related JUNIT test cases for Struts2为 Struts2 创建与数据库相关的 JUNIT 测试用例
【发布时间】: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


【解决方案1】:

您可以查看使用Dbunit

DbUnit 是一个 JUnit 扩展(也可用于 Ant) 数据库驱动的项目,除其他外,将您的数据库 在测试运行之间进入已知状态。这是一个很好的方法 避免一个测试用例可能出现的无数问题 损坏数据库并导致后续测试失败或 加剧伤害。

DbUnit 能够将您的数据库数据导出和导入到 来自 XML 数据集。从 2.0 版开始,DbUnit 也可以与非常 在流模式下使用时的大型数据集。 DbUnit 也可以帮助您 验证您的数据库数据是否与预期的一组值匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多