我从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在任何使用它的地方都会有相同的期望值,这并不总是有意义的。在
我可以在测试函数中使用monkeypatch
fixture来注入Fake
s,但这并不像使用装饰器那么简单。在
我还可以定义返回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>你好像每次都要注射。在
不知道什么是最好的方法。在
根据this issue comment,fudge并不打算与pytest兼容。在
相关问题 更多 >
编程相关推荐