如何只运行部分代码

时间:2016-10-22 09:07:39

标签: python pytest

我正在尝试使用pytest进行单元测试。我在单元测试代码中导入源代码并对其进行测试。但在进行单元测试时,我不想在源代码中执行或注释掉代码的某些部分。但是我无法在源代码中进行更改。那么在执行期间有没有办法在我的源代码中注释一些代码块。

2 个答案:

答案 0 :(得分:1)

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

就个人而言,我会忽略这样一个事实,即我想忽略的部分代码正在自动测试中进行测试"。接受"性能损失"并且不要修改源代码。这比简单的开销更糟糕。您永远无法确定您正在测试的是合法代码。此外,当有人修改源代码时,很有可能会破坏您的测试 - 也会以意想不到的方式(它不会解决问题)。

答案 1 :(得分:0)

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

>>> 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