单元测试包的新功能。 我试图通过以下代码验证函数返回的 DataFrame。即使我将
assert_frame_equal
的输入硬编码为相等 (pd.DataFrame([0,0,0,0])
),单元测试仍然失败。有人愿意解释一下为什么会发生吗?
import unittest
from pandas.util.testing import assert_frame_equal
class TestSplitWeight(unittest.TestCase):
def test_allZero(self):
#splitWeight(pd.DataFrame([0,0,0,0]),10)
self.assert_frame_equal(pd.DataFrame([0,0,0,0]),pd.DataFrame([0,0,0,0]))
suite = unittest.TestLoader().loadTestsFromTestCase(TestSplitWeight)
unittest.TextTestRunner(verbosity=2).run(suite)
错误:AttributeError:“TestSplitWeight”对象没有属性“assert_frame_equal”
alecxe 答案不完整,您确实可以将 pandas'
assert_frame_equal()
与 unittest.TestCase
一起使用,使用 unittest.TestCase.addTypeEqualityFunc
import unittest
import pandas as pd
import pandas.testing as pd_testing
class TestSplitWeight(unittest.TestCase):
def assertDataframeEqual(self, a, b, msg):
try:
pd_testing.assert_frame_equal(a, b)
except AssertionError as e:
raise self.failureException(msg) from e
def setUp(self):
self.addTypeEqualityFunc(pd.DataFrame, self.assertDataframeEqual)
def test_allZero(self):
self.assertEqual(pd.DataFrame([0,0,0,0]), pd.DataFrame([0,0,0,0]))
assert_frame_equal()
来自 pandas.testing
包,而不是来自 unittest.TestCase
类。替换:
self.assert_frame_equal(pd.DataFrame([0,0,0,0]),pd.DataFrame([0,0,0,0]))
与:
assert_frame_equal(pd.DataFrame([0,0,0,0]), pd.DataFrame([0,0,0,0]))
当您拥有
self.assert_frame_equal
时,它会尝试在 assert_frame_equal
实例上查找 unittest.TestCase
属性,并且,由于 assert_frame_equal
类上没有公开 unittest.TestCase
属性或方法,因此它引发了 AttributeError
。
如果导入这个,问题就消失了。
from pandas.testing import assert_frame_equal # <-- for testing dataframes