生产cod的PyTest测井

2024-06-16 09:35:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的模块,其中包含实用程序方法,如密码解密,文件夹删除,其他模块在代码中使用。我正试图为这些方法编写单元测试。在

此模块导入另一个名为LogFactory的模块,该模块处理记录器和日志配置。在

在简单模块.py

from log import LogFactory

log = LogFactory.getlogger(__name__)

def decrypt(pass, key):
   #magic
   log.debug(message)

问题就出现在这里。日志记录配置作为INI文件传递到LogFactory模块中的日志记录模块。整个python代码由一个shell脚本运行,该脚本在运行python模块之前替换INI文件中的某些条目。所以在生产过程中,一切都顺利地进行。在

问题是,当pytest导入第一个生产代码时,当记录器所需的值没有被shell脚本替换时,它会遇到一个错误。在

试验_简单模块.py

^{pr2}$

我现在正在编写没有日志记录项的测试。但我需要在以后包含这些日志条目。在

1)当涉及到实用程序方法的日志记录时,我在设计方面做了什么错误?我觉得错误出在生产代码中,因为我不能正确地为它编写单元测试

2)我尝试了Monkeypatching,但意识到导入生产代码时出错了。在

3)在这种情况下,标准做法是什么?放弃单元测试,去做一些端到端的自动化?在


Tags: 模块文件方法代码py实用程序脚本log
1条回答
网友
1楼 · 发布于 2024-06-16 09:35:53

因此,首先,这似乎指出,您可能需要重构日志代码,以避免作为导入的副作用而执行某些操作。正如你刚刚发现的那样,在导入时做任何事情都会伤害到你。在

分类后,您应该能够轻松地创建一个autouse fixture,它创建一个(虚拟)logger实例,该实例将在测试期间被调用。这可以像所有日志都是noop一样简单,或者将其存储在测试断言中进行检查(请参阅pytest capturelog以获取fixture的灵感,它为stdlib日志记录做了这件事)。在

如果您真的不能重构日志模块使其正常工作,您可以通过在pytest_configure()钩子中创建正确的INI文件(并在pytest_unconfigure()中还原它)来绕过这一问题,该钩子将在之前被调用py.测试在尝试任何导入之前执行它的测试集合。在

相关问题 更多 >