Ткань: Как я могу unit test мой файл?

В предыдущем проекте, над которым я работал, наш fabfile вышел из-под контроля. Пока остальная часть нашего проекта была хорошо протестирована, мы не пишем ни одного теста для нашего fabfile. Рефакторинг был пугающим, и мы не были уверены, что команда ткани будет работать так, как мы ожидали, пока не выполним команду.

Я запускаю новый проект, и я хотел бы убедиться, что наш fabfile хорошо протестирован с самого начала. Послушайте Testing Goat имеет отличную статью, обсуждая некоторые возможные стратегии, но у нее больше вопросов, чем ответов. Использование fabtest - это возможность, хотя кажется, что она мертва.

Кто-нибудь успешно выполнил тестирование своего файла? Если да, то как?

Ответ 1

  • запустите задачу Fabfile в Docker экземпляре

  • используйте docker diff, чтобы убедиться, что правильные файлы были изменены Fabfile.

Это все еще довольно много работы, но оно позволяет тестировать без чрезмерных модификаций Fabfile.

Ответ 2

Вы пробовали python-vagrant? Кажется, он делает то же самое, что делает fabtest, но включает в себя некоторые демонстрации Fabric и все еще используется и поддерживается.

Ответ 3

Слайды - упомянутые Хенриком Андерссоном - оттуда доступны здесь

Робин Ковеланд Хансен ответил мне:

Есть несколько примеров способов рефакторинга, которые мы сделали для того, чтобы наш тестовый код был хорошо протестирован.

В целом я бы сказал, что лучший совет - попытаться избежать использования низкоуровневого кода, такого как команды оболочки в коде более высокого уровня, который принимает решения о том, какой код запускать, например. изолировать эффект-полный код от кода, который принимает решения.

Ветвление увеличивает количество тестовых случаев, которые вам нужны, и гораздо больше усилий для написания хороших тестовых примеров для кода, который изменяет состояние на каком-то сервере.

В то время мы использовали mock для издевательства над тканью для написания тестовых примеров для безрискового кода, который имеет побочные эффекты на сервере, поэтому тесты с кодом + будут выглядеть как this
Очевидно, это имеет слабость, что он не будет получать ошибки в командах оболочки сами. Мой опыт в том, что это редко является причиной серьезных проблем.

Другие варианты с использованием mock будут использовать следующую идею для запуска тесты локально на вашем компьютере вместо удаленно

Возможно, самый надежный подход - запустить тесты в бродяжнике, но у него есть недостаток, требующий большого количества настроек, и имеет тенденцию замедлять тесты.
Я думаю, что важно иметь быстрые тесты, потому что тогда вы можете запускать их все время, и они дают вам действительно хороший цикл обратной связи.

Развертывание script, которое я написал для моего нынешнего работодателя, имеет ~ 150 тестовых примеров и работает менее чем за 0,5 секунды, поэтому deploy- script будет выполнять самотестирование перед развертыванием.
Это гарантирует, что он тестируется на каждой машине-разработчике все время, что выявило несколько ошибок, например, для случаев, когда linux и mac osx ведут себя по-разному.