Какая польза от assert_predicate в MiniTest?

У меня проблемы с пониманием полезности assert_predicate в минитесте. Чем он отличается от assert_equal? Когда кто-то захочет использовать это утверждение? Я сталкивался с этим много раз, но не совсем понял его точное значение.

2 ответа

assert_equal проверяет, равны ли ожидаемые и фактические значения:

assert_equal "Bender", robot.name

assert_predicate вызывает именованный метод для вашего целевого объекта и проходит, если результат верен:

assert_predicate robot, :bender?

Вы можете написать этот тест так же легко, как:

assert robot.bender?

Но assert_predicate может быть немного более выразительным в некоторых ситуациях и может быть немного лучше при проверке нескольких условий предиката:

roles = %i(admin? publisher? operator?)
roles.each {|role| assert_predicate user, role }

Документация для самого метода может ответить на ваш вопрос:

Для тестирования с предикатами. Например:

assert_predicate str, :empty?

Это действительно предназначено для спецификаций и передается assert_operator:

str.must_be :empty?

Это говорит о том, что причина заключается в поддержке .must_be звонки, а не предоставление какой-либо конкретной выгоды по сравнению с assert_equal или же assert,

Другие вопросы по тегам