【问题标题】:How to patch/mock import?如何修补/模拟导入?
【发布时间】:2020-09-30 12:40:12
【问题描述】:

我正在为气流 dag 编写测试,但遇到了模拟/修补 dag 的问题。

# dag.py
from airflow.models import Variable

ENVIRONMENT = Variable.get("environment")
# test_dag.py
import dag

class TestDAG(TestCase):
    def test_something(self):
        pass

因为我只是在函数或类之外设置变量,所以它在导入期间运行 Variable.get()。这将给我一个 SQLAlchemy 错误,因为它正在尝试连接到数据库并获取变量。

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: variable
[SQL: SELECT variable.val AS variable_val, variable.id AS variable_id, variable."key" AS variable_key, variable.is_encrypted AS variable_is_encrypted 
FROM variable 
WHERE variable."key" = ?
 LIMIT ? OFFSET ?]
[parameters: ('environment', 1, 0)]

有没有办法在气流.models.Variable 导入之前对其进行修补/模拟?

【问题讨论】:

  • 我最终在导入之前对其进行了修补,这不是很好,但我还没有找到其他方法。这会产生 pep8 和 linting 错误,因为导入不再分组在顶部。如果有人有建议,我会留下问题
  • 能否在代码中显示一下?

标签: python unit-testing testing mocking airflow


【解决方案1】:

您需要推迟导入文件,直到您可以将 Variable 值设置到测试数据库中。 startTestRun 方法将是完美的地方。

【讨论】:

  • 我不想连接到测试数据库,我想模拟它。你能举个例子吗?我无法让它工作
  • 开发人员通常会使用内存中的 SQLite 数据库,该数据库会根据需要为每个测试构建/销毁。
猜你喜欢
  • 2013-09-24
  • 1970-01-01
  • 2019-05-02
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-17
相关资源
最近更新 更多