如何使用软糖补丁和派兹在一起

2024-05-18 13:57:14 发布

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

我从nose切换到{a2},使用fudge创建mock/fakes时遇到问题,因为@fudge.patch将它们传递给测试函数,但pytest将测试函数参数解释为fixture。在

我想知道pytest和fudge是不是根本上不兼容,或者我缺少了一个窍门。我更喜欢fudge而不是mock,因为它允许您更直观地设置期望值,所有这些都在测试前的一个位置,而mock通过在测试之前定义返回值和在测试后定义预期调用来拆分。在

有了鼻子,我就可以用这样一个fudge.Fake来修补:

from datetime import datetime
from fudge import patch

def today():
    return datetime.utcnow()

def something():
    return today()

test_time = datetime(2018, 1, 1, 12, 34, 56)

@patch('today')
def test_something(fake_today):
    fake_today.expects_call().returns(test_time)
    result = something()
    assert result == test_time

注意fudge如何让你在一个地方设置预期的调用和假返回,我发现这比mock的方式更直观。在

但是,使用pytest会引发一个异常,因为pytest将测试函数的参数解释为fixture,而不知道今天有一个fixture叫做fake_:

^{pr2}$

我可以将fake_today声明为fixture,但我不认为pytest会检查期望值,如果这样做了,那么fixture在任何使用它的地方都会有相同的期望值,这并不总是有意义的。在

我可以在测试函数中使用monkeypatchfixture来注入Fakes,但这并不像使用装饰器那么简单。在

我还可以定义返回Fake的fixture,如下所示:

@pytest.fixture
def request(monkeypatch):
    """
    Fake Session.request method so tests can mock expected REST requests.
    """
    fake_request = fudge.Fake()
    monkeypatch.setattr('requests.sessions.Session.request', fake_request)
    yield fake_request
    fudge.verify()

{cdy>你好像每次都要注射。在

不知道什么是最好的方法。在


Tags: testtodaydatetime定义pytestrequestdefmock

热门问题