Unittestパッケージの新機能。次のコードを使用して、関数によって返される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'
assert_frame_equal()
は、pandas.util.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
を発生させました。
alecxeの回答は不完全です。実際、パンダの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]))