почему я люблю разработку на основе тестов

1656613689 pochemu ya lyublyu razrabotku na osnove testov

автор Арит Амана

1*OvF5QBJTAjMURU4G2BSWNA

Когда я впервые писал о разработке, ориентированной на тестирование, я думал, что влюблен в эту концепцию… но это был только этап флирта. Теперь я с головой упал в Лубутен, подружка! ?

Повышение эффективности от отсутствия необходимости запускать мое приложение для тестирования – это только начало. Разработка моих программ с помощью RSpec заставляет меня по-настоящему задуматься о том, как я определяю и структурирую свой код. Кроме того, каждый раз, когда мои тесты проваливаются, они честно предоставляют советы и подсказки, которые помогают мне устранить неполадки, отсутствующие, сломанные или лишние. Теперь это метафора жизни в целом… но я отвлекаюсь. ?

Я создаю онлайн-приложение для шахмат в составе команды разработчиков, и на этой неделе мне поручили создать перейти_к!(x,y) метод. Это должно переместить шахматную фигуру (наз пешек отныне) на поле шахматной доски по месту расположения (х, у).

Если фигура соперника (наз король отныне) занимает (x,y), пешка должна захватить его. Если собрат пешки занимает (x,y), метод должен вызвать сообщение об ошибке, а пешка никуда не уходит.

Примечание: move_to!(x,y) не учитывает, действительны ли перемещения или захваты. Это сделают другие способы.

Я настроил FactoryBot для создания экземпляров шахматной игры. Каждая шахматная фигура имеет следующие соответствующие атрибуты: :location_x, :location_y, : белый (логический; правда = белый цвет), :game_idи :не увлеченно (логический; ошибочный = кусок восторженно). Мой первый тест определил, переместилась ли пешка (сейчас на 0,0) на пустое поле (7,7):

Дальше я начал писать перейти_к!(x,y) метод, затем запустил мой тест:

arit (master) chessapp $ rspec spec/models/piece_spec.rb
.
Finished in 0.43495 seconds (files took 15.68 seconds to load)
1 example, 0 failures

Да! Нет ошибок. ?? Затем я написал тест, чтобы определить, осталась ли пешка на месте, если его место назначения было занято дружеской фигурой (мы назовем это roв порядке):

Почему я не проверяю значение грак.не увлеченно, rook.location_x и rook.location_y? Ну, игра – это общительная фигура, о которой идет речь, но на самом деле мы тестируем любую фигуру (если она есть) найдено и сохранено в назначение переменный. Теперь, чтобы уточнить метод:

Мои тесты снова прошли! ?? Чувствуя себя очень уверенно, я перешел к третьему тесту: чтобы определить, был ли в плен король противника и занял ли его место пешку:

Я также завершил метод:

Но когда я запустил свои тесты, я получил такую ​​ошибку:

arit (master *) chessapp $ rspec spec/models/piece_spec.rb
..F
Failures:
1) Piece captures opponent's piece on destination, then assumes that position
Failure/Error: expect(destination.notcaptured).to be false
expected false
got true
# ./spec/models/piece_spec.rb:104:in `block (2 levels) in <top (required)>'
Finished in 0.21787 seconds (files took 4.83 seconds to load)
1 example, 1 failure
Failed examples:
rspec ./spec/models/piece_spec.rb:95 # Piece captures opponent's piece on destination, then assumes that position

Что??? назначение. не обновлялся? Почему? Я перечитываю свой метод снова и снова. Казалось, ничего хватает или сломано (и, на самом деле, сколько я мог ошибиться в 11 строках кода?).

После того как решили сделать как? и посмотрите мой тест rspec sloooowwly, мне пришло в голову, что dназначение Ожидалось, что переменная изменится. Метод move_to!(x,y) обновил свой location_x, location_y и нвосторженный атрибуты.

Потом меня ударило — мне нужно было ПЕРЕЗАГРУЗИТЬ назначение из базы данных в RSpec. Тогда мои три теста прошли отлично:

Разработка, ориентированная на тестирование, навсегда повлияла на мою практику кодирования, и я наслаждался возможностью привлечь к ней всех остальных товарищей по команде. TDD – легкий, эффективный, безопасный, показательный, и он помогает мне сначала создать более качественный код… ну, ладно… по как можно меньше времени! ?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *