Я думаю, что вполне допустимо использовать утверждения в Ruby. Но вы упоминаете две разные вещи:
- платформы xUnit используют
assert
методы для проверки ваших ожиданий тестов. Они предназначены для использования в вашем тестовом коде, а не в коде приложения.
- Некоторые языки, такие как C, Java или Python, включают конструкцию
assert
, предназначенную для использования внутри кода ваших программ, для проверки предположений об их целостности. Эти проверки встроены в сам код. Это не утилита для тестирования, а для разработки.
Я недавно написал solid_assert: небольшая библиотека Ruby, реализующая утилиту подтверждения Ruby , а также пост в моем блоге, объясняющий его мотивацию .. Он позволяет вам писать выражения в виде:
assert some_string != "some value"
assert clients.empty?, "Isn't the clients list empty?"
invariant "Lists with different sizes?" do
one_variable = calculate_some_value
other_variable = calculate_some_other_value
one_variable > other_variable
end
И их можно деактивировать, чтобы assert
и invariant
оценивались как пустые операторы. Это позволит вам избежать проблем с производительностью. Но обратите внимание, что Прагматичные программисты рекомендуют не деактивировать их. Вы должны деактивировать их, только если они действительно влияют на производительность.
Что касается ответа, говорящего о том, что идиоматический способ Ruby использует нормальное выражение raise
, я думаю, что ему не хватает выразительности. Одно из золотых правил утверждающего программирования - не использовать утверждения для нормальной обработки исключений. Это две совершенно разные вещи. Если вы используете один и тот же синтаксис для двух из них, я думаю, что ваш код будет более неясным. И, конечно, вы теряете возможность их деактивировать.
Вы можете быть уверены, что использование утверждений - хорошая вещь, потому что две обязательные к прочтению классические книги, такие как Прагматичный программист от путника до мастера и Code Complete , посвящают им целые разделы и рекомендую их использовать. Есть также хорошая статья под названием Программирование с утверждениями , которая очень хорошо иллюстрирует, что такое ассертивное программирование и когда его использовать (оно основано на Java, но концепции применимы к любому языку).