我正在为某些功能编写一些单元测试。这个特定的图像返回两个图像之间差异的百分比值。在测试中,我使用assert
语句来评估布尔值,结果是错误的。
当图像在公差范围内匹配时,该函数返回True,并且在此运行中,我将image_a.png与自身进行比较,因此每次都返回True。出于某些未知原因,“断言匹配为True”每次都会引发断言错误。
这是错误日志:
platform linux2 -- Python 2.7.5, pytest-4.6.5, py-1.8.0, pluggy-0.12.0
_____________________________ test_imagediff_match _____________________________
tmpdir = local('/tmp/pytest-of-install2/pytest-5620/test_imagediff_match0')
def test_imagediff_match(tmpdir):
"""
Test normal usage of routine. Images are identical and should match with 0
error.
"""
tmpdir.chdir()
base_dir = os.path.dirname(__file__)
= os.path.join(base_dir, "image_a.png")
image_b = os.path.join(base_dir, "image_a.png")
comparison = imagediff.ImageDiff(canon=image_a, export=image_b)
match = comparison.images_match()
> assert match is True
E assert True is True
pythontools/fluids_testing/tools/tests/test_imagediff.py:20: AssertionError
当然,这不应引发错误。
此错误最初是由pytest-4.6.5在TFS的自动构建环境中的python 2.7.5上引发的,但是我在PowerShell中运行的Python 3.7.4中重复了该错误。
有人知道逻辑为什么会完全失败吗?我原本以为True已被重新分配,但这在Python 3中是不可能的。
答案 0 :(得分:0)
我在通过将语句更改为assert match
发布问题之前解决了这个错误,我只是想知道为什么会这样。
我发现了错误! imagediff返回numpy.bool_
类型,由于某种原因它不是True
。
>>> test.test_imagediff_closematch(pathlib.Path("."))
Type of 'match': <class 'numpy.bool_'>
repr(match) = True
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\mrea\Documents\FluidsTestTools\pythontools\fluids_testing\tools\tests\test_imagediffssim.py", line 40, in test_imagediff_closematch
assert match is True
AssertionError
>>>
我发现numpy.bool_
不能与常规bool
进行比较很奇怪,但是我想无论如何我都将它们进行了比较。