我尝试使用 pytest 进行一些单元测试。
我正在考虑做这样的事情:
actual = b_manager.get_b(complete_set)
assert actual is not None
assert actual.columns == ['bl', 'direction', 'day']
ok中的第一个断言但是第二个断言我有一个值错误。
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我认为这不是用pytest断言两个不同列表相等的正确方法。
如何判断数据帧列(列表)是否等于预期的列?
由于
答案 0 :(得分:24)
请参阅this:
注意:
您可以简单地使用
assert
语句来断言测试 期望。 pytest的Advanced assertion introspection会 智能地报告断言表达式的中间值 让您无需学习JUnit legacy methods的许多名称。
this:
针对许多案例进行了特殊比较:
- 比较长字符串:显示上下文差异
- 比较长序列:第一个失败的指数
- 比较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
在那边看到列表与文字==
相等的断言? pytest为你做了很多努力。
答案 1 :(得分:8)
您可以执行列表推导以检查所有值的相等性。如果您在列表推导结果上调用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
答案 2 :(得分:7)
在编写断言之前,请回答以下问题:
a = [1, 2, 3]
b = [3, 2, 1]
diff = set(a) ^ set(b)
assert not diff
在大型列表上使用此方法很方便,因为diff
仅包含它们之间的差异,因此AssertionError
将紧凑且
可读。
注意set()
将删除重复项。最好也检查一下:
assert len(a) == len(set(a))
a = [1, {'a': 1}, 2, 3]
b = [3, 2, 1, {'a': 1}]
assert sorted(a) == sorted(b)
a = [1, 2, 3, {'a': 1}]
b = [1, 2, 3, {'a': 1}]
assert a == b
答案 3 :(得分:5)
如果您使用的是内置unittest.TestCase
,则已有一种方法可以为您执行此操作:unittest.TestCase.assertListEqual
如果您关心列表排序,unittest.TestCase.assertCountEqual
如果您不喜欢“T。
https://docs.python.org/3.5/library/unittest.html#unittest.TestCase.assertCountEqual
答案 4 :(得分:1)
使用numpy
函数array_equal
:
import numpy as np
test_arrays_equal():
a = np.array([[1, 3], [2, 3], [1, 4], [2, 4], [1, 5], [2, 5]])
b = np.array([[1, 3], [2, 3], [1, 4], [2, 4], [1, 5], [2, 5]])
assert np.array_equal(a, b)
答案 5 :(得分:0)
将numpy数组转换为python列表,与仅使用all
或any
相比,您将获得更好的响应。这样,如果测试失败,您将看到预期与实际的差异
答案 6 :(得分:0)
您还可以使用https://github.com/AdityaSavara/UnitTesterSG,可以通过pip UnitTesterSG获得