python - 我可以拦截 pytest 的命令行参数吗?
问题描述
我非常喜欢pytest,尤其是它能够很好地运行单元测试的能力。但是,我有一些关于 unittest 的技巧,我不知道如何用 pytest 重现,所以我还不能编写完整的 pytest-only 测试。
最好显示,而不是解释。
import unittest
import sys
def active():
print("active")
def f_default():
print("inactive")
class Test(unittest.TestCase):
def test_it(self):
print("passed")
if __name__ == '__main__':
flag = "--systrace"
if flag in sys.argv:
f_default = active
sys.argv.remove(flag)
f_default()
unittest.main()
基本上,如果在--systrace
命令行中传入,我会拦截它,在测试脚本中翻转一些状态,不一定给单元测试,然后将其从sys.argv
. unittest 并不明智。
用开关:
python test_unittest_commandline.py --systrace
active
passed
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
没有开关:
$ python test_unittest_commandline.py
inactive
passed
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
pytest 没有留下深刻印象
这是意料之中的,因为我不在场,__main__
所以我从不排除出乎意料的论点。是否有一个 pytest 钩子可以用来清除 sys.argv 并记下参数的值?同样,我不在乎参数化测试或 pytest 本身。作为测试运行者,我从来没有运气好过鼻子,但鼻子也没有为单元测试带来自己的增强。
pytest test_unittest_commandline.py --systrace
ERROR: usage: pytest [options] [file_or_dir] [file_or_dir] [...]
pytest: error: unrecognized arguments: --systrace
inifile: None
rootdir: /explore
解决方案
推荐阅读
- reactjs - ReactNative:无法按下 Animated.View 的事件父组件
- angular - 类型上不存在属性“VAR_PLURAL”
- python-3.x - Pycryptodome Python3 RSA.importKey 阻塞/挂起
- php - Laravel Session 值不同/未在其他控制器(Redis)中更新
- ngxs - ngxs 状态运算符插入或替换数组中的项目(upsert)
- android - 具有自定义视图的 MVVM 架构
- .htaccess - htaccess 重写以从子目录进行路由
- excel - 进入无限循环
- javascript -
插入标签而不是 '\r\n' - typescript - 如何使用 typescript 捆绑项目构建包依赖项?