我们目前正在开发一个大量使用 PostgreSQL 的应用程序。大多数情况下,我们使用 SQLAlchemy 访问数据库,这非常有效。为了测试相关对象,可以模拟,或者在没有数据库访问权限的情况下使用。但是系统的某些部分运行非标准查询。这些子系统必须创建临时表,插入大量行,然后将数据合并回主表。
目前这些子系统中有一些SQL语句,但这使得相关的类与数据库紧密耦合,进而使单元测试变得更加困难。
基本上我的问题是,是否有解决此问题的设计模式?我唯一能想到的就是将这些 SQL 语句放入一个单独的类中,然后将一个实例传递给另一个类。这样我就可以为单元测试模拟query-class,但感觉还是有点笨拙。有更好的方法吗?
最佳答案
所以在尝试了更多之后,我现在有了一个还算不错的解决方案。我将有问题的类(class)分成三个独立的类(class):
- 提供对所需数据的访问的类;
- 支持临时表内容的上下文管理器;
- 以及具有所有逻辑的旧类(没有数据库的东西);
当我实例化我的逻辑类时,我为它提供了上述类的一个实例。它工作正常,抽象有点漏洞(尤其是上下文管理器),但我现在至少可以正确地对逻辑进行单元测试。
关于python - 复杂查询的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16999676/