У меня есть программа с несколькими очень похожими классами:Как UnitTest несколько подобных классов
class BlackBox1():
def calc(self, a, b):
return a + b
class BlackBox2():
def calc(self, a, b):
return a * b
...
Теперь я хочу написать UnitTests для всех этих классов. Конечно, я могу написать отдельные тесты для каждого Blackbox. Во всяком случае, так как каждый черный ящик имеет точно такой же метод calc(a, b)
для тестирования, интересно, если есть что-то вроде «лучшей практики», чтобы автоматически давать уроки и ожидаемые результаты в абстрактном рамки теста, что-то вроде
import unittest
class TestAbstractBox(unittest.TestCase):
def setUp(self):
self.box = blackbox()
self.param_a = a
self.param_b = b
self.expected_result = result
def test_calc_method(self):
real_result = self.box.calc(self.param_a, self.param_b)
self.assertEqual(real_result, self.expected_result,
"{0} gives wrong result".format(self.box.__class__))
TAbstractTest = unittest.defaultTestLoader.loadTestsFromTestCase(TestAbstractBox)
Есть ли способ передать {"blackbox": Blackbox1, "a": 3, "b": 5, "result": 8}
и {"blackbox": Blackbox2, "a": 4, "b": 7, "result": 28}
классу TestAbstractBox, чтобы не иметь несколько раз тот же код, но иметь простой способ протестировать новые Blackboxes?
И как это лучше, просто просто удерживая массив dicts в 'setUp'? Это только усложняет ваш тест. – freakish
Просто для того, чтобы назвать самые важные: если нужны дополнительные тесты для некоторых черных ящиков, их можно легко добавить в класс, если у меня будет более одного теста, ваш ответ будет требовать каждый раз, когда цикл for, я вижу только первый неудачный тест в test_calc_method (поэтому, если несколько ящиков сломаны, я получаю их только шаг за шагом). Поскольку это основа, другие люди могут добавлять дополнительные черные ящики, я могу дать им простой способ проверить свои поля. Мне также нравится ваш пример, но для моего случая это работает лучше и выглядит более объективно ориентированным. –
Уверен, что вам больше подходит. – freakish