У меня есть код Ruby 2.0, который работает с телефонными номерами, которые я хочу протестировать с помощью MiniTest. У меня есть функция, которая принимает аргументы номера телефона и тестирует его (включая утверждения). Каждый раз, когда я вызываю эту функцию, я хочу, чтобы это был новый тестовый пример. Что-то вроде этого:
listOfPhoneNumbersForTesting.each { |phone| testphone phone }
Я НЕ хочу:
class test2125551212 < MiniTest::Unit::TestCase
def t2125551212
testphone "2125551212"
end
end
... повторить 10, 20 или 100 раз, чтобы проверить каждый номер телефона...
Очевидно, что я могу поместить код цикла в MiniTest:: Unit:: TestCase, но это приводит к одному тестовому тесту, независимо от того, сколько телефонных номеров я тестирую, и мне это не нравится. (Кроме того, если одно из утверждений терпит неудачу, то больше нет телефонных номеров, и я не хочу этого!) Также вторая форма выглядит как нарушение DRY для меня, поскольку имя класса, имя функции и аргумент все номера содержат номер телефона.
Как-то я чувствую, что должен иметь один класс под названием TestPhone и создать его с аргументом номера телефона и получить его в рамках MiniTest. но я был бы готов использовать setup(), Fixtures, метапрограммирование или что-то еще, если бы это сработало.
listOfPhoneNumbersForTesting.each { |phone| TestPhone.new phone }
Где TestPhone является подклассом TestCase и заканчивает вызов тестового телефона для выполнения работы.
В принципе, я хочу: 1. Один список телефонных номеров, и если я добавлю число в список, я получаю еще один TestCase для вывода отчета. 2. Если тесты, связанные с одним номером телефона, терпят неудачу, остальные все еще проверяются. 3. Все номера телефонов получают одинаковое тестирование, которое включает в себя несколько утверждений.
Большое спасибо!