У меня есть набор функций, которые применяются к похожему объекту, например массив Numpy, который представляет собой n-мерную рамку:
# 3-D box parameterized as:
# box[0] = 3-D min coordinate
# box[1] = 3-D max coordinate
box = np.array([
[1, 3, 0],
[4, 5, 7]
])
Теперь у меня есть целый набор функций, которые я хочу запускать в списках блоков, например. volumes
, intersection
, smallest_containing_box
и т. Д. На мой взгляд, вот то, как я надеялся настроить это:
# list of test functions:
test_funcs = [volume, intersection, smallest_containing_box, ...]
# manually create a bunch of inputs and outputs
test_set_1 = (
input = [boxA, boxB, ...], # where each of these are np.Array objects
output = [
[volA, volB, ...], # floats I calculated manually
intersection, # np.Array representing the correct intersection
smallest_containing_box, # etc.
]
)
# Create a bunch of these, eg. test_set_2, test_set_3, etc. and bundle them in a list:
test_sets = [test_set_1, ...]
# Now run the set of tests over each of these:
test_results = [[assertEqual(test(t.input), t.output) for test in test_funcs] for t in test_sets]
Причина, по которой я хочу структурировать это, заключается в том, что я могу создать несколько наборов пар (вход, ответ) и просто выполнить все тесты для каждой из них. Если я что-то упустил, структура unittest
, похоже, не работает с этим подходом. Вместо этого кажется, что он хочет, чтобы я создал отдельный объект TestCase для каждой пары функции и ввода, т.е.
class TestCase1(unittest.TestCase):
def setUp(self):
self.input = [...]
self.volume = [volA, volB, ...]
self.intersection = ...
# etc.
def test_volume(self):
self.assertEqual(volume(self.input), self.volume)
def test_intersection(self):
self.assertEqual(intersection(self.input), self.output)
# etc.
# Repeat this for every test case!?
Это похоже на безумное количество шаблонов. Я что-то упустил?