bAN*_*bAN 15 python unit-testing pytest
我正在尝试用pytest进行一些单元测试.
我在考虑这样做:
actual = b_manager.get_b(complete_set)
assert actual is not None
assert actual.columns == ['bl', 'direction', 'day']
Run Code Online (Sandbox Code Playgroud)
ok中的第一个断言但是第二个我有一个值错误.
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)
我假设这不是用pytest断言两个不同列表相等的正确方法.
如何断言数据帧列(列表)是否等于预期的列?
谢谢
Roc*_*ite 39
看到这个:
注意:
您可以简单地使用该
assert语句来断言测试期望.pytest的高级断言内省将智能地报告断言表达式的中间值,使您无需学习JUnit遗留方法的许多名称.
与此:
对许多案例进行了特殊比较:
- 比较长字符串:显示上下文差异
- 比较长序列:首先是失败的指数
- 比较dicts:不同的条目
而报告演示:
failure_demo.py:59: AssertionError
_______ TestSpecialisedExplanations.test_eq_list ________
self = <failure_demo.TestSpecialisedExplanations object at 0xdeadbeef>
def test_eq_list(self):
> assert [0, 1, 2] == [0, 1, 3]
E assert [0, 1, 2] == [0, 1, 3]
E At index 2 diff: 2 != 3
E Use -v to get the full diff
Run Code Online (Sandbox Code Playgroud)
==在那里看到列表与文字相等的断言?pytest为你完成了艰苦的工作.
GGG*_*ser 19
在写断言之前,请回答以下问题:
a = [1, 2, 3]
b = [3, 2, 1]
diff = set(a) ^ set(b)
assert not diff
Run Code Online (Sandbox Code Playgroud)
在大型列表上使用此方法很方便,因为diff将只包含它们之间的差异,因此AssertionError紧凑且可读。
注意set()将删除重复项。最好也检查一下:
assert len(a) == len(set(a))
Run Code Online (Sandbox Code Playgroud)
a = [1, 2, 3, {'a': 1}]
b = [1, 2, 3, {'a': 1}]
assert a == b
Run Code Online (Sandbox Code Playgroud)
rit*_*e46 14
您可以执行列表推导以检查所有值的相等性.如果您调用all列表推导结果,True如果所有参数相等,它将返回.
actual = ['bl', 'direction', 'day']
assert all([a == b for a, b in zip(actual, ['bl', 'direction', 'day'])])
print(all([a == b for a, b in zip(actual, ['bl', 'direction', 'day'])]))
>>> True
Run Code Online (Sandbox Code Playgroud)
Ada*_*son 13
在 Python 3.9 中,现在应该可以工作:
def test_arrays_equal():
a = [1, 2, 3]
b = [1, 2, 4]
assert a == b
Run Code Online (Sandbox Code Playgroud)
或者,您可以将列表解析为numpy数组并使用 function array_equal:
import numpy as np
def test_arrays_equal():
a = [1, 2, 3]
b = [1, 2, 4]
ar = np.array(a)
br = np.array(b)
assert np.array_equal(ar, br)
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您使用内置的unittest.TestCase,那么已经有一种方法可以为您做到这一点:unittest.TestCase.assertListEqual如果您关心列表排序,unittest.TestCase.assertCountEqual如果您不关心列表排序。
https://docs.python.org/3.5/library/unittest.html#unittest.TestCase.assertCountEqual
| 归档时间: |
|
| 查看次数: |
21419 次 |
| 最近记录: |