【发布时间】:2021-01-22 06:57:59
【问题描述】:
我正在尝试使用 python unittest 框架进行处理 csv 文件的单元测试。
我想测试列名匹配、列中的值匹配等情况。
我知道有更方便的库,例如 datatest 和 pytest ,但我只能在我的项目中使用 unittest。
猜我使用了错误的unittest.TestCase 方法,并以错误的格式发送数据。
请告知如何更好地做到这一点。
db.csv 示例:
TIMESTAMP TYPE VALUE YEAR FILE SHEET
0 02-09-2018 Index 45 2018 tq.xls A01
1 13-05-2018 Index 21 2018 tq.xls A01
2 22-01-2019 Index 9 2019 aq.xls B02
这里是代码示例:
import pandas as pd
import unittest
class DFTests(unittest.TestCase):
def setUp(self):
test_file_name = 'db.csv'
try:
data = pd.read_csv(test_file_name,
sep = ',',
header = 0)
except IOError:
print('cannot open file')
self.fixture = data
#Check column names
def test_columns(self):
self.assertEqual(
self.fixture.columns,
{'TIMESTAMP', 'TYPE', 'VALUE','YEAR','FILE','SHEET'},
)
#Check timestamp format
def test_timestamp(self):
self.assertRaisesRegex(
self.fixture['TIMESTAMP'],
r'\d{2}-\d{2}-\d{4}'
)
#Check year values
def test_year_values(self):
self.assertIn(
self.fixture['YEAR'],
{2018, 2019, 2020},
)
if __name__ == '__main__':
unittest.main()
错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
TypeError: assertRaisesRegex() arg 1 must be an exception type or tuple of exception types
TypeError: 'Series' objects are mutable, thus they cannot be hashed
感谢任何帮助。
【问题讨论】:
-
为了测试一些替代方案,最好有一个您正在处理的 .csv 的代表性 sn-p。
-
@anddt 当然,我添加了示例
标签: python pandas dataframe unit-testing python-unittest