我有一个函数,我不想每次在Flask-RESTFul API中运行测试时都运行它。这是一个设置示例:
class function(Resource):
def post(self):
print 'test'
do_action()
return {'success':True}
在我的测试中,我想运行这个函数,但忽略do_action()。如何使用pytest实现这一点?
这似乎是标记测试的好机会
@pytest.mark.foo_test
class function(Resource):
def post(self):
print 'test'
do_action()
return {'success':True}
然后如果你用打电话
py.test -v -m foo_test
它将只运行那些标记为"foo_test"的测试
如果你用打电话
py.test -v -m "not foo_test"
它将运行所有未标记为"foo_test"的测试
您可以在测试中模拟do_action
:
def test_post(resource, mocker):
m = mocker.patch.object(module_with_do_action, 'do_action')
resource.post()
assert m.call_count == 1
因此,在本次测试中不会调用实际函数,这带来了额外的好处您可以检查post
实现是否实际在调用该函数。
这需要pytest mocker安装(无耻的插头)。