使用COM接口在客户端应用程序中进行数据库集成测试

时间:2018-06-21 06:50:09

标签: c# testing

简介

我在这样的环境中工作:企业主机应用程序正在通过ProgID调用具有已实现COM接口的客户端应用程序。这就是宿主应用程序的程序员如何通过插件增强应用程序的方式。

Host app <-> COM interface <-> Client app

客户端应用可以使用提供的COM界面中的方法。

该方法之一是RunSqlQuery(rawSqlQuery)。在主机应用程序登录用户的范围内,它有可能与SQL进行完全通信(根据连接身份验证类型,它可以是Windows或SQL用户)。

在客户端应用程序中,我们没有使用任何其他数据库上下文-我们完全依赖于主机提供的方法来在原始SQL中运行查询/命令。

随着我们代码库的增长,我越来越担心项目体系结构,可测试性和维护性-它们几乎都为零。与往常一样-项目经理看不到问题所在。

问题

最大的问题是,由于我们与宿主应用程序方法耦合在一起,所以我找不到找到如何编写数据库集成测试的方法。

在存储库或查询对象中,我使用的是这样的东西(简化):

public List<Entity> GetAll()
{
    var entities = new List<Entity>();

    var result = _host.RunSqlQuery("SELECT Col1, Col2, Col3 FROM table");

    while (!result.End())
    {
        // adding to list

        result.Next();
    }

    return entities;
}

不可能以这种形式对其进行测试,因为:

  1. 我没有上下文
  2. 如果我使用自己的上下文,则不能使用该方法,因为首先必须启动主机应用程序,即COM接口方法正在执行的地方。

那我该怎么办?做一些更高的层次并使用策略根据环境(正常/测试)选择主机方法或.NET SQL客户端方法?我不明白。

我必须做好准备,我所做的一切仅是出于可测试性。我可以对其进行模拟,但是正如我所说,我希望在可能的地方对零件进行集成测试。

0 个答案:

没有答案