动态Python单元测试

时间:2015-11-13 19:49:32

标签: python unit-testing

我是python单元测试的新手。我一直在玩unittest和py.test。我想以ini格式验证数据。一个例子

[Section1]
key1 = value1
key2 = value2
key3 = value3
...
[Section2]
key1 = value1
...

ini文件中的节名称可能有所不同。我有数据,我将它与部分/键名进行比较。

我试图为每个部分创建一个测试用例,这样我就可以根据部分名称生成一个失败的报告,哪个键/值是错误的。我研究完全被卡住了。

1 个答案:

答案 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,来自您的金币的值对复制。

(如果黄金副本的一个部分列出了所有允许的键/值对,请修改代码,以便在比较期间明确使用部分名称。)