2015-06-04 6 views
-1

У меня есть следующий код, который выполняет модульные тесты кода, который я разработал для соответствия выражений 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 конструктор для модульных тестов, но я хочу, чтобы дать возможность тестировать разные каталоги для поиска в разных тестах вместо жесткого кодирования пути в функции tm.search_for_regex_match.

+0

Вы все еще жестко кодируете значение, просто в другом месте. Вероятно, вы должны просто установить 'self.path' в методе' setUp'. – chepner

ответ

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 и просто иметь класс с двумя методами, которые создаются и выполняются явно из основного. Тогда вы не будете публиковать тестовые примеры в своей базе кода с помощью тестов.

EDIT: нет ничего плохого в тестировании кода, который ищет файлы против фактических файлов. Просто, что вы упомянули о производительности в вопросе, и это меня испугало :)

Смежные вопросы