如何只运行部分代码

How to run only some part of code

我正在尝试使用 pytest 进行单元测试。我在单元测试代码中导入源代码并进行测试。但是在进行单元测试时,我不想执行或注释掉源代码中的某些代码。但我无法更改源代码。那么有什么方法可以仅在执行期间在我的源代码中注释某些代码块。

您尝试做的强烈建议应该重构源代码,如果由于任何原因无法对其进行单元测试 运行。无论您提出什么解决方案,它都将非常脆弱。话虽这么说,正如@user7056566 指出的那样,您可以将它作为字符串加载,修改它(例如使用正则表达式)然后调用 exec

就我个人而言,我会忽略 "part of code which I want to ignore is being tested in automated testing" 这一事实。接受 "performance penalty" 并且不修改源代码。这比简单的开销要糟糕得多。您永远无法确定您正在测试的是合法代码。此外,在有人修改源代码的那一刻,它很有可能会破坏您的测试 - 也是以意想不到的方式(它不会发现问题)。

您可以 'mock' 测试用例中的特定代码部分,而无需修改源代码(您正在导入)。

>>> def foo():
...     return 'bar'
... 
>>> foo()
'bar'
>>> from unittest.mock import MagicMock
>>> placeholder = foo
>>> foo = MagicMock(return_value='bat')
>>> foo()
'bat'
>>> foo = placeholder
>>> foo()
'bar'
>>> 

python 中提供了大量模拟工具 - 模拟 http 调用(REST API 等)。这是一个很好的开场白:https://blog.fugue.co/2016-02-11-python-mocking-101.html