您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何让pytest重写非测试模块中的断言

如何让pytest重写非测试模块中的断言

更新:

Pytest 3.0引入了一种新方法register_assert_rewrite来实现此确切功能。如果您使用的是pytest 3.0或更高版本,请尝试此操作。register_assert_rewrite

原始答案:

可以回答我自己的问题,但我想我找到了解决方案并希望分享

诀窍在于pytest如何收集测试模块。我们可以定义python_files,pytest.ini以便pytest将更多模块视为测试模块。

例如,在我的情况下,我所有的自定义断言模块都以“ asserts”结尾,所以我pytest.ini是:

[pytest]
python_files = *asserts.py test_*.py *_test.py

一个棘手的事情是conftest.py。看来我们必须避免在中导入asserts模块conftest.py。我的假设是pytest用于重写assert的技术实际上是重写.pyc文件,并且由于conftest.py在收集之前已加载,因此如果我们导入asserts模块,.pyc则该模块将在收集之前生成,这可能会使pytest无法重写.pyc再次归档。

因此,在conftest.py中,我必须执行以下操作:

@pytest.fixture(autouse=Ture)
def setup_asserts(request):
    from custom_asserts import CustomAsserts
    request.instance.asserts = CustomAsserts()

而且我将获得额外的错误信息,就像assert直接在测试脚本中使用关键字一样。

其他 2022/1/1 18:46:20 有381人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶