Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python doctest应与十六进制表示法匹配,无需自定义OutputChecker_Python_Unit Testing_Pytest_Docstring_Doctest - Fatal编程技术网

Python doctest应与十六进制表示法匹配,无需自定义OutputChecker

Python doctest应与十六进制表示法匹配,无需自定义OutputChecker,python,unit-testing,pytest,docstring,doctest,Python,Unit Testing,Pytest,Docstring,Doctest,我通常使用字节和十六进制,并且有一系列帮助器方法来处理这些数字 我正在将doctests添加到我的docstring中,以帮助确保它们正常工作。请参见以下示例: 从键入导入元组 def get_hi_low_字节(十六进制值:int)->元组[int,int]: “”“将四个十六进制字符分为高字节和低字节。 例如:0x0424变为0x04,0x24。 先决条件: 十六进制值>>获取高位低位字节(0x0424) (4, 36) 如何使输出为: (0x04,0x24) """ 返回divmod(十六

我通常使用字节和十六进制,并且有一系列帮助器方法来处理这些数字

我正在将
doctest
s添加到我的docstring中,以帮助确保它们正常工作。请参见以下示例:

从键入导入元组
def get_hi_low_字节(十六进制值:int)->元组[int,int]:
“”“将四个十六进制字符分为高字节和低字节。
例如:0x0424变为0x04,0x24。
先决条件:
十六进制值>>获取高位低位字节(0x0424)
(4, 36)
如何使输出为:
(0x04,0x24)
"""
返回divmod(十六进制值,0x100)
目前,我不知道如何获取
doctest
来解释预期(输出)中的十六进制符号。我通过调用
doctest

这个问题()正好是我要找的。不幸的是,答案是定制一个基本上将
want
转换为
int


我想知道,是否有一些标志可以传递给
doctest
,使它能够解释十六进制表示法,而不需要自定义
OutputChecker

doctest
是关于再现Python交互输出的。它有一些配置选项,主要是关于可能很难匹配的输出,但是由于您无法将Python配置为总是输出十六进制值而不是数字的十进制值,所以doctest没有理由提供这样的选项

但是,您可以在doctest集成中使用自定义的
输出检查器
,如中所述,例如将其添加到
conftest.py

pytest.ini

conftest.py

来自doctest导入输出检查器
从unittest导入模拟
导入pytest
类HexOutputChecker(OutputChecker):
def检查_输出(自我、想要、得到、选项标志):
如果需要,则使用('0x')启动:
want_str=str(int(want,16))+'\n'
返回OutputChecker。检查输出(self、want、got、optionflags)
其他:
返回OutputChecker。检查输出(self、want、got、optionflags)
@pytest.fixture(autouse=True)
def hex_out():
使用mock.patch('doctest.OutputChecker',HexOutputChecker'):
产量
test_doc.py

def doc():
"""
>>> 5 * 5
0x19
"""
通过
运行
pytest-rA test\u doc.py
给出:

...
=============================================== short test summary info ===============================================
PASSED test_doc.py::test_doc_test.doc
================================================== 1 passed in 0.07s ==================================================

(4,36)
是输出,Python不会在没有特定指令的情况下以十六进制打印整数。例如,您可以使用
>>获取高低字节(0x0424)=(0x04,0x24)
,它将输出
真值
,或者
>>[获取高低字节(0x0424)中x的十六进制(x)]
,这将输出
['0x4',0x24']
。平等测试是一个很好的解决方法@jornsharpe,谢谢!更近一步!感谢您提供了一个关于如何将
doctest.OutputChecker
集成到
pytest
中的好例子。事实似乎是,匹配十六进制的唯一方法是使用自定义输出检查器。正如@jornsharpe所指出的,这不是Python提供的输出,而
doctest
是关于复制Python交互式输出的。由于不能以这种方式配置Python,因此没有理由提供这样的选项。最后,提供自己的输出检查器并不是什么大问题。为了清晰起见,我在答案中添加了这一点(最后一条评论)。
...
=============================================== short test summary info ===============================================
PASSED test_doc.py::test_doc_test.doc
================================================== 1 passed in 0.07s ==================================================