Вы можете сделать это, используя monkeypatch
, однако вам нужно знать , что вызывает foo
, чтобы исправить это перед импортом. Взяв ваш пример, мы можем проиллюстрировать, как это будет работать.
import io
import sys
def test_get_num(monkeypatch):
stdout = io.StringIO()
with monkeypatch.context() as mc:
mc.setattr(sys, 'stdout', stdout)
from sandbox import get_num
assert stdout.getvalue() == "doing something I don't want to happen during testing like making a connection\n"
assert get_num() == 1
А затем, когда мы его запустим:
$ -> pytest -s test_sandbox.py
========================= test session starts =========================================
collected 1 item
test_sandbox.py .
Обратите внимание, как даже выполняется pytest
с -s
, чтобы разрешить * Операторы 1013 *, отображаемые в консоли, не отображаются. Вы можете сделать то же самое с foo
в своем реальном примере. Если он создает какое-то соединение с базой данных, то monkeypatch
соединение, чтобы ничего не делать, и затем импорт после этого. Надеюсь, это поможет.