У меня есть несколько функций на графике f(), g() и h(), которые реализуют разные алгоритмы для одной и той же задачи. Я хотел бы протестировать эти функции с помощью фреймворка unittest.
Для каждого алгоритма всегда должны выполняться несколько ограничений (например, пустой граф, граф только с одним узлом и т. д.). Код для проверки этих общих ограничений не должен дублироваться. Итак, тестовая архитектура, которую я начал разрабатывать, была следующей:
class AbstractTest(TestCase):
def test_empty(self):
result = self.function(make_empty_graph())
assertTrue(result....) # etc..
def test_single_node(self):
...
Затем конкретные тестовые случаи
class TestF(AbstractTest):
def setup(self):
self.function = f
def test_random(self):
#specific test for algorithm 'f'
class TestG(AbstractTest):
def setup(self):
self.function = g
def test_complete_graph(self):
#specific test for algorithm 'g'
... И так далее для каждого алгоритма
К сожалению, Nosetests пытается выполнить каждый тест в AbstractTest, и это не работает, поскольку фактическая функция self.function указана в подклассах. Я попытался установить __test__ = False
в случае AbstractTest, но в этом случае тест вообще не выполняется (поскольку это поле унаследовано, я полагаю). Я безуспешно пытался использовать абстрактный базовый класс (abc.ABCMeta). Я читал о MixIn без какого-либо результата (я не очень в нем уверен).
Я вполне уверен, что я не единственный, кто пытается факторизовать тестовый код. Как вы это делаете в Python?
Спасибо.