У меня есть несколько функций на графе 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'
... и так далее для каждого алгоритма
К сожалению, при тестировании носа выполняется попытка выполнить каждый тест в AbstractTest, и он не работает, поскольку фактическая функция self.function указана в подклассах. Я попытался установить __test__ = False
в случае AbstractTest, но в этом случае тест не выполняется вообще (так как это поле наследуется, я полагаю). Я пытался с абстрактным базовым классом (abc.ABCMeta) без успеха. Я читал о MixIn без какого-либо результата (я не очень уверен в этом).
Я совершенно уверен, что я не единственный, кто пытается факторизовать тестовый код. Как ты это делаешь в Python?
Спасибо.