У меня есть код 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 и в конечном итоге вызывает testphone для выполнения работы.
По сути, я хочу следующее: 1. Один список телефонных номеров, и если я добавлю номер в список, я получу еще один TestCase в выводе отчета. 2. Если тесты, связанные с одним телефонным номером, не пройдены, остальные продолжают тестироваться. 3. Все телефонные номера проходят одинаковое тестирование, включающее несколько утверждений.
Большое спасибо!