Это то, как вы тестируете функции, взяв блок в Ruby? - PullRequest
1 голос
/ 15 мая 2011

У меня есть функция, которая с учетом набора учащихся и их оценок делает классификацию:

students = {"Good student":"A","Bad Student":"D","Average student":"C"}
student_cat = ["Best","So-so","Below average"]

И моя функция работает так:

categorize(students,student_cat) do |s,g|
   # s would be "Good student" and g would be "Best"
   # s would be "Bad student" and g would be "Below average"
   # s would be "Average student" and g would be "So-so"
end

Сейчас я тестирую это так:

  categorize(students,student_cat) do |s,g|
       assert g == "Best" if s == "Good student"
       assert g == "Below average" if s == "Bad student"
       assert g == "So-so" if s == "Average student"
  end

Есть ли другой способ тестирования функций, принимающих блоки в качестве параметров? Это достаточно хороший способ?

1 Ответ

2 голосов
/ 15 мая 2011

Это будет хорошо работать.Вы можете сделать тест немного более строгим, если вы используете блок для сбора результатов, а затем утверждаете весь результат:

results = []
categorize(students,student_cat) do |s,g|
  results << [s, g]
end
assert results == [
  ["Good student", "Best"],
  ["Bad Student", "Below average"],
  ["Average student", "So-so"],
]

Таким образом, функция не может выдавать какую-то ерунду вместе справильные результаты и пусть они остаются незамеченными.

Если функция может возвращать свои результаты в любом порядке, то сортируйте результаты перед их сравнением:

assert results.sort == [
  ["Average student", "So-so"],
  ["Bad Student", "Below average"],
  ["Good student", "Best"],
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...