使用可变输入进行单元测试

时间:2015-06-04 20:52:22

标签: python regex unit-testing

我有以下代码对我为在主目录和每个子目录中的所有文件中匹配reg表达式而开发的代码执行单元测试。

我正在构建单元测试以确保它运行良好,但我对单元测试非常陌生。

我有以下代码:

class TestRegexMatches(unittest.TestCase):

def __init__(self,root_dir):
    self.path = root_dir

def testEmptyRegex(self):
    # Can't match negative look-ahead
    key = re.compile('(?!)')
    self.assertEqual(sum(tm.search_for_regex_match(self.path,key).values()),0)

def testIntersection(self):
    key1 = re.compile('[abc]')
    key2 = re.compile('[^abc]')
    self.assertNotEqual(tm.search_for_regex_match(self.path,key1),
                        tm.search_for_regex_match(self.path,key2))


if __name__ == '__main__':
    test_obj = TestRegexMatches('/home/luis/test')
    unittest.main()

此代码目前无效。通常情况下,单元测试不会有 init 构造函数,但我希望能够为测试提供不同的目录以进行不同的测试,而不是在{{1}中对路径进行硬编码功能。

1 个答案:

答案 0 :(得分:1)

有一个技巧可以解决你的需求(但不是一个好的单元测试实践):

class YourTest(unittest.TestCase):
    PATH = 'home/luis/test'

    def test_foo(self):
        # do your thing with PATH

    def test_bar(self):
        # do your other thing with PATH

class YourOtherTest(YourTest):
    PATH = 'home/luis/other-directory'

单元测试引擎将找到两个类TestCase的子类,它将执行两个以test_开头的每个方法。即test_foo将在两个路径中执行,test_bar也将执行。

单元测试不是基准测试,它们会检查代码单元是否为真或假。

你也可以不从TestCase继承,只是有一个包含两个方法的类,这两个方法被实例化并从你的main中显式运行。那么你就不会用你的基准内容来判断代码库中的测试用例。

编辑:测试根据实际文件搜索文件的代码没有任何问题。只是你在问题中提到了表现,这让我害怕:)