首页 > 解决方案 > 数据库单元测试 - 如何模拟过程中的时间

问题描述

我在 Azure 数据库实例中有一个 TSQL 过程。该过程具有确定 ETL 过程状态的逻辑,并且对当前时间敏感以确定事件是否在界限内。此过程具有复杂的行为并且是核心要求

我必须验证程序的行为。我正在用 Python 编写单元测试,我用unittest它来管理测试和pyodbc调用数据库。无论调用过程的时间如何,这些单元测试都必须验证过程的行为。我需要数据库表现得好像是某个时间,例如“05:30:00”

我熟悉模拟对象以随时运行测试并删除外部依赖项的概念。我认为这不适用于 Microsoft 数据库,更像是 REST API。另一个考虑因素是我不想针对我想要测试的对象的副本,因为副本可能与原始对象不同。

唯一想到的解决方案(坏解决方案)是:

1的结果是;

2的结果是;

这两个选项都很糟糕。有没有人能够解决这种问题?

标签: unit-testingstored-proceduresazure-sql-databasepython-unittest

解决方案


程序不会从程序内访问时间GETDATE()。将DATETIME提供给由外部作用域提供的过程参数

这将需要一些重构,但意味着该过程随后是可单元测试的。希望我能更快地想到它:/


推荐阅读