Руби для романтиков [Роман Пушкин] (pdf) читать постранично, страница - 80

-  Руби для романтиков  [Самая простая книга по языку Руби с заданиями] 11.73 Мб, 408с. скачать: (pdf) - (pdf+fbd)  читать: (полностью) - (постранично) - Роман Пушкин

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

поэтому нельзя применить к
ним матчер be. Ведь надпись может быть нарисована разной краской, разным
размером и т.д.
Т.к. все в руби объект, то это важно. Например, переменные a и b ниже равны,
но их идентификаторы разные, т.к. это разные объекты и они расположены в
разных областях памяти:
$ pry
> a = "XXX"
> b = "XXX"
> a == b
=> true
> a.__id__ == b.__id__
=> false

Давайте напишем еще один тест для нашей программы:
⁸¹https://relishapp.com/rspec/rspec-expectations/docs/built-in-matchers

Часть 4. Введение в ООП

400

it 'should calculate shipment with multiple items' do
expect(
Shipment.total_weight(soccer_ball_count: 3, tennis_ball_count: 2,\
golf_ball_count: 1)
).to eq(1420)
end

Ради удобства чтения выражение, которое мы хотим проверить было перенесено на отдельную строку. Результат выполнения всех тестов:
$ rspec -f d
Shipment
should work without options
should calculate shipment with only one item
should calculate shipment with multiple items
Finished in 0.00291 seconds (files took 0.19016 seconds to load)
3 examples, 0 failures

Все это хорошо, но выше был дан пример тестирования «статического» метода,
или метода класса (точнее модуля, что почти одно и то же), но не экземпляра.
Заметьте, что мы нигде не создавали никакого объекта, а вызывали класс напрямую. В случае наличия объекта для тестирования все становится намного
интереснее.
Можно долго рассказывать про rspec и существуют отдельные книги⁸² на эту
тему, но самый лучший совет, который могут дать авторы: при написании
программ старайтесь думать о том, как вы будете тестировать написанный
⁸²https://leanpub.com/everydayrailsrspec

Часть 4. Введение в ООП

401

вами код. Существует множество приёмов, но наша задача — познакомить вас
с синтаксисом и дать основы.

Задание 1:
Попробуйте заменить 1420 выше на 1421 и посмотрите что произойдет (тест не должен сработать).

Задание 2:
Код файла shipment.rb был изменен: если в метод “total_weight” не
переданы аргументы, генерируется ошибка (также говорят “выбрасывается исключение”):

module Shipment
module_function
def total_weight(options={})
raise "Can't calculate weight with empty options" if options.empty?
a = options[:soccer_ball_count] || 0
b = options[:tennis_ball_count] || 0
c = options[:golf_ball_count] || 0
(a * 410) + (b * 58) + (c * 45) + 29
end
end

Измените тест таким образом, чтобы тест проверял, что ошибка на самом деле
генерируется.

Часть 4. Введение в ООП

402

Заключение
Мы рассмотрели лишь некоторые возможности языка Руби, выполнили задания, заложили фундамент, который позволит уверенно двигаться дальше.
Для любого программиста очень важно понимание основ и возможностей
инструментов.
Знания, изложенные в этой книге, в течение нескольких лет собирались из
разных источников. Они дают неоспоримое преимущество перед другими
учащимися. Возможно, вам придется обращаться к этой книге снова — это
нормальный процесс, т.к. полученная информация усваивается постепенно,
оседает слоями, каждый раз дополняя общее понимание.
Если какие-то моменты оказались сложны для вашего понимания, мы рекомендуем вернуться к прочитанному материалу через 2-3 месяца. Авторы
желают успехов, не останавливаться на достигнутом, двигаться вперед к намеченной цели — удаленная работа, которая даёт свободу и финансовую
независимость.