我是python单元测试的新手。我一直在玩unittest和py.test。我想以ini格式验证数据。一个例子
[Section1]
key1 = value1
key2 = value2
key3 = value3
...
[Section2]
key1 = value1
...
ini文件中的节名称可能有所不同。我有数据,我将它与部分/键名进行比较。
我试图为每个部分创建一个测试用例,这样我就可以根据部分名称生成一个失败的报告,哪个键/值是错误的。我研究完全被卡住了。
答案 0 :(得分:1)
gold.cfg是:
[SECTION1]
key1 = value1
key2 = value2
key3 = value3
[第2节]
key4 = value4
key5 = value5
key6 = value6
[Section3中]
key7 = value7
key8 = value8
key9 = value9
其中example.cfg是:
[SECTION1]
key1 = value1
key2 = value2
key3 = value3
[第2节]
key1 = value1
# -*- coding: utf-8 -*-
import unittest
try:
import ConfigParser as configparser # Python 2
except ImportError:
import configparser # Python 3
class TestValidConfig(unittest.TestCase):
def setUp(self):
self.gold_config = configparser.RawConfigParser()
self.gold_config.read('gold.cfg')
self.allowed_section_names = self.gold_config.sections()
return None
def _test_allowed_section_names_pass(self):
example_config = configparser.RawConfigParser()
example_config.read('example.cfg')
for section_name in example_config.sections():
self.assertTrue(section_name in self.allowed_section_names)
return None
def test_values_by_section_pass(self):
"""Test example using setUp()"""
example_config = configparser.RawConfigParser()
example_config.read('example.cfg')
for section_name in example_config.sections():
example_pairs = example_config.items(section_name)
gold_pairs = self.gold_config.items(section_name)
self.assertTrue(set(example_pairs).issubset(set(gold_pairs)))
return None
if __name__ == '__main__':
unittest.main()
迭代用sections()方法命名的部分:for section_name in example_config.sections()
。
items()方法返回键,值元组的列表,因此使用set来断言示例文件中的键,值对列表是键的subset,来自您的金币的值对复制。
(如果黄金副本的一个部分列出了所有允许的键/值对,请修改代码,以便在比较期间明确使用部分名称。)