День 14 — задания
Практика прошла по ходу чтения — в блоках «Попробуйте сейчас». Здесь итог: всё, что сверит course check 14. Если какой-то пункт пропустили, вернитесь к странице, которая указана рядом. Список страниц:
course toc 141. Четыре предсказания — страницы 2, 3, 5
Сделать: сдать ответы на четыре вопроса «что выведет».
course answer day14.q1 ОТВЕТ
course answer day14.q2 ОТВЕТ
course answer day14.q3 ОТВЕТ
course answer day14.q4 ОТВЕТВместо ОТВЕТ — число или слово, как его печатает go test. Можно отправить заново — засчитывается последний.
Готово, когда: пункты q1, q2, q3, q4 в course check 14 зелёные.
2. Три формы запуска — страницы 1, 2
Сделать: выполните тесты тремя способами: обычно, подробно и по имени.
cd ~/gocourse/day14/scratch
go test .
go test -v .
go test -v -run TestPrice .Готово, когда: пункты t_test, t_verbose и t_run зелёные. Имя после -run берите своё — то, что стоит в вашем price_test.go сейчас: после страницы 5 там одна функция TestPrice, после страницы 6 к ней добавляется TestPriceOnThreshold.
3. Первый тест к функции cost — страница 3
Сделать: написать в ~/gocourse/day14/cost файл cost_test.go — тест к функции cost из соседнего файла. Условие и свои числа:
cd ~/gocourse/day14/cost
cat TASK.txtТребования: имя файла на _test.go, package main, import "testing", функция func TestCost(t *testing.T), внутри — сравнение результата с числом, которое вы посчитали сами, и t.Errorf при расхождении. Файл cost.go не меняйте.
Готово, когда: пункты cost и costfn зелёные. Проверка прогонит ваш тест дважды: на вашей функции — он должен пройти, и на заведомо неверной версии функции — он должен упасть. Пункт costfn («cost.go не переписан») показывают только вместе с работой: пока ни одного теста нет, он красный — даром его не получить.
4. Таблица случаев для packs — страница 5
Сделать: написать в ~/gocourse/day14/packs файл packs_test.go — одна тестовая функция и таблица не меньше чем на четыре случая.
cd ~/gocourse/day14/packs
cat TASK.txtСреди случаев обязательно партия, которая делится на размер коробки ровно, и партия 0 шт. Файл packs.go не меняйте.
Готово, когда: пункты table, tablezero и packtable зелёные. table и tablezero — это две разные неверные версии функции: одна ошибается на ровных партиях, другая — на нулевой. packtable смотрит на форму теста: одна тестовая функция, таблица случаев и цикл по ней, не меньше четырёх строк-случаев.
5. Починка по упавшему тесту — страница 6
Сделать: в ~/gocourse/day14/deliver:
- найти количество штук, на котором программа считает неверно;
- написать
total_test.go— тест, который на этом случае падает; - починить
total.go— правка одна-две строки, больше двух проверка не примет; - прогнать тест и программу ещё раз.
cd ~/gocourse/day14/deliver
cat TASK.txt
go test .
diff ~/.course/orig/day14/deliver/total.go total.goГотово, когда: пункты fix, fixtest, reprod и fixsmall зелёные. Проверка прогонит программу на нескольких вводах — часть из них скрыта — и отдельно убедится, что ваш тест падает на исходной, ещё не починенной версии функции.
6. Ритуал перед коммитом — страница 7
Сделать: привести в порядок все три каталога.
cd ~/gocourse/day14
gofmt -l .
go vet ./...
go test ./...Если gofmt -l . печатает имена файлов — gofmt -w . или Ctrl+S в VS Code.
Готово, когда: пункт code_fmt зелёный: в cost, packs и deliver код отформатирован и go vet молчит. Пункт про ваши тесты, а не про заготовки: пока ни в одном из трёх каталогов нет своего файла на _test.go, он красный.
7. Коммиты — страницы 1, 3, 5, 6, 7
Сделать: репозиторий ~/gocourse/day14 заводится на первой странице (git init и коммит с заготовками), дальше коммит — последним шагом каждого задания: cost, packs, репродьюсер в deliver и починка. Всего нужно не меньше четырёх коммитов с изменениями.
cd ~/gocourse/day14
git status -s
git add .
git commit -m "что сделали"
git log --onelineГотово, когда: пункт git зелёный — коммитов с изменениями не меньше четырёх, и в истории есть все три файла с тестами.
8. Словарик ошибок — страница 7
Сделать: в ~/errors.md — минимум 28 строк вида «текст ошибки — что значило». Между ошибкой и разбором — тире с пробелами вокруг.
Готово, когда: пункт errors зелёный.
9. Звёздочка
В зачёт не входит, course check 14 эти задания не смотрит.
- Допишите в
packs_test.goслучай с большой партией — например, в сто коробок с хвостом. Посчитайте ожидаемое на бумаге, а не запуском программы. - В
costсделайте второй тест —TestCostZero— на заказ 0 штук. Запустите только его:go test -run TestCostZero . - Сломайте
packs.goпятью разными способами по очереди (границу, знак деления, начальное значение) и посмотрите, какие из них ваша таблица не ловит. Допишите случаи, которые их поймают. - Посмотрите, какие строки функции тест ни разу не выполнил:
go test -cover .в каталоге задания, разбор — вcourse extra 14.
Готово, когда: каждая из пяти поломок падает хотя бы на одном случае таблицы, а go test -cover . показывает больше, чем до правок.
Порог: 16 пунктов из 19. После зачёта — контрольные вопросы: course quiz 14.