我在这样的环境中工作:企业主机应用程序正在通过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;
}
不可能以这种形式对其进行测试,因为:
那我该怎么办?做一些更高的层次并使用策略根据环境(正常/测试)选择主机方法或.NET SQL客户端方法?我不明白。
我必须做好准备,我所做的一切仅是出于可测试性。我可以对其进行模拟,但是正如我所说,我希望在可能的地方对零件进行集成测试。