【发布时间】:2013-05-16 15:17:06
【问题描述】:
我有一个模块可以解析不同的文件格式,如 CSV、XLS、HTML 等。
不同的格式包含完全相同的信息,所以我制作了不同的类来解析不同的文件类型。这些类具有完全相同的公共 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())
这样做可以吗?如果是,如何在不使用相同的 TestCases 的情况下一次对所有这些进行单元测试
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())
适用于每个类。有可能吗?
【问题讨论】:
-
这似乎或多或少类似于stackoverflow.com/questions/16305985/unit-test-suite-in-python。如果您应该在一个测试中测试多个实现,要回答您的问题,我会说不,因为这不会为您提供其中哪些失败以及哪些没有失败的信息。
标签: python unit-testing python-unittest