当前位置: 首页 > 知识库问答 >
问题:

使用PowerMock-easymock模拟数据库对象

沙岳
2023-03-14
public interface ShoppingListDAO extends GenericDAO<Object, String> {       
    public List<ShoppingList> getShoppingList(Department department) throws ShoppingListDAOException;
}

它的实现DAO类类似于下面的一个。

 public  class ShoppingListDAOImpl extends GenericCustomDAO<Object, String> implements ShoppingListDAO {
    //.......
    public  List<ShoppingList> getShoppingList(Department department)  throws ShoppingListDAOException {

    try {               
        ds = getDataSource();
        connection = ds.getConnection();

        callableStatment = connection.prepareCall(SHOPPING_LIST_QRY1);  
        callableStatment.setString(1, department.getDistributorNumber());
        //......    
        callableStatment.registerOutParameter(4, OracleTypes.CURSOR);

        callableStatment.execute();
        resultSet= (ResultSet) callableStatment.getObject(4);

        while(resultSet.next()) {
            //.......
        }           
    } catch (SQLException e) {          
        e.printStackTrace();
        throw new ShoppingListDAOException(e);
    } catch (Exception e) {         
        e.printStackTrace();
        throw new ShoppingListDAOException(e);
    }finally{
        //......                
    }   
}

    return shoppingList;
}

我搜索了PowerMock/EasyMock文档,但我猜大多数API方法都提供了对象,这些对象为我提供了DAO接口的虚拟实现类。

>

  • 是否有某种方法可以创建连接的模拟对象(假设我没有物理数据库访问权限),并可以运行ShoppingListaoImpl类中提供的后续代码,因为我必须使用这种模拟来实现代码覆盖率?

  • 共有1个答案

    严宏朗
    2023-03-14

    使用像EasyMock、Powermock或Mockito这样的模拟框架,您可以模拟一切。但是我不建议模仿连接

    在您的例子中,我将使用内存中的数据库(如HSQLDB)来针对实际的DB(但运行在内存中的DB)测试DAO。这样,您的测试就不依赖于任何外部资源,并且可以轻松地在任何环境中运行。

    通过针对数据库测试代码,严格来说,您不再是对其进行单元测试了。虽然我认为这是一个可以接受的权衡。

     类似资料:
    • 我正在尝试使用EasyMock+PowerMock模拟静态方法。如果我没有模拟静态方法,那么我会得到异常java.lang.ExceptioninInitializerError,但它有一个不同的堆栈跟踪,这完全是由于我的代码文件造成的,错误是显而易见的。但是,如果我使用EasyMock+PowerMock模拟静态方法,则行PowerMock.MockStaticNice(ClassName.Cl

    • 我尝试从以下方法创建单元测试,但我找不到一个解决方案来模拟每个方法内的调用,请您帮助我使用EasyMock为这些方法创建JUnit Test: 提前感谢

    • 问题内容: 我正在使用EasyMock编写许多协作类的单元测试。这些类之一(称为)打开了到远程服务器的网络连接,并将该服务器的XML响应解析为其余类可以使用的东西。 目前,我的测试仅涉及所有情况都是笨拙且远程服务器已启动并正在运行并按预期返回XML的情况。但是,如果可以进行模拟,以便模拟远程服务器关闭或发生其他问题导致抛出,该怎么办,我 会 更高兴。 我看过EasyMock API,但看不到任何看

    • 我正在尝试为以下类编写单元测试: 还有一些其他方法,但这个设置代码是与我的问题相关的。在单元测试中,我想模拟(使用EasyMock)对象以及它将返回的和对象: 当我尝试用JUnit运行它时,我得到以下错误: 在上没有我可以看到的公共变量。我是EasyMock的新手,所以我想我的问题是:对于我应该告诉我的mock返回什么,以及如何告诉它这样做?我根本不知道为什么设置代码会被调用,所以这是另一个谜。更

    • 我有一个使用PowerMock的测试用例来测试数学中的静态方法,如 我的pom。xml看起来像 我得到的错误是 这是我第一次使用PowerMock,我只想测试静态方法,我选择Java数学类进行测试。我想我已经完成了说明书中的所有部分https://code.google.com/p/powermock/wiki/MockStatic 我的测试用例出了什么问题?

    • 问题内容: 是否可以使用EaskMock模拟具体的类?如果是这样,我该怎么办? 问题答案: 请参阅EasyMock类扩展文档,并从SourceForge项目下载它。但是,您不能模拟最终方法。 编辑:如注释中所述,这是EasyMock v3及更高版本的一部分。