我有一個解析CSV,XLS,HTML等不同文件格式的模塊。
不同的格式包含完全相同的信息,所以我做了不同的類來解析不同的文件類型。這些類具有完全相同的公共API,顯然具有相同的基類是這樣的:如何使用python在模塊中使用相同的公共API對每個類進行單元測試?
class BaseParser(object):
def countTotalValues(self):
pass
def countItems(self):
pass
class CSVParser(BaseParser):
def __init__(self):
"""Init data, check for errors, etc.."""
def parse(self):
""" parses the data and set the result dictionaries like self.values, self.items, etc."""
class XLSParser(BaseParser):
""" Ha exactly the same public API as CSVParser and set the same inner values. """
pass
它是在與相同的值一次一個好主意,每個類的單元測試? 我一直在做這樣的:
class TestParserClasses(unittest.TestCase):
def setUp(self):
self.instances = []
for class_, file_ in PARSER_CLASSES:
self.instances.append(class_(file_))
def tearDown(self):
del self.instances
,並定義每單元測試是這樣的:
def test_count_total_values_without_parameter(self):
for parser in self.instances:
parser.parse()
self.assertEqual(Decimal('9216.84'), parser.countTotalValues())
def test_count_items_without_parameter(self):
for parser in self.instances:
parser.parse()
self.assertEqual(128, parser.countItems())
是否好做呢?如果是,如何進行單元測試所有的人,一次與相同的TestCase沒有
for parser in self.instances:
parser.parse()
所以我想要寫單元測試是這樣的:應用於每類
def test_count_total_values_without_parameter(self):
self.assertEqual(Decimal('9216.84'), parser.countTotalValues())
def test_count_items_without_parameter(self):
self.assertEqual(128, parser.countItems())
。可能嗎 ?
這似乎或多或少類似於http://stackoverflow.com/questions/16305985/unit-test-suite-in-python。要回答你的問題,如果你應該在一次測試中測試多個實現,我會說不,因爲這不會告訴你哪個失敗,哪些沒有失敗。 –