В чем особенности тестирования в Ruby по сравнению с Python
Что проверяют
Широту кругозора и умение сравнивать инструменты по сути, а не по слухам. Для Python-вакансии важнее, насколько глубоко вы знаете свою сторону: следом почти наверняка спросят про фикстуры pytest и про то, как правильно мокать.
Как отвечать
Сравнивайте по конкретным осям:
- инструменты: в Ruby RSpec и Minitest (Rails по умолчанию генерирует Minitest, но многие проекты живут на RSpec). В Python
unittestиз стандартной библиотеки и pytest как фактический стандарт; - стиль: RSpec это DSL из
describe,context,itи матчеровexpect(x).to eq(y). В pytest обычные функции и простойassert, который pytest переписывает так, чтобы при падении показать значения; - подготовка данных: в RSpec ленивый
letиbefore. В pytest фикстуры с областями видимости (function,module,session), общие черезconftest.py, и@pytest.mark.parametrize. Аналог FactoryBot в Python это factory_boy; - моки: в Ruby классы открыты, и
allow(obj).to receive(:call)подменяет метод на лету. В Pythonunittest.mock.patchподменяет имя там, где его ищут, а не там, где оно объявлено; - внешний мир: WebMock и VCR в Ruby,
responses,respxиvcrpyв Python; - соглашения:
spec/*_spec.rbпротивtests/test_*.py, покрытие через SimpleCov иcoverage.pyсpytest-cov.
Вывод: принципы одинаковы, различаются синтаксис и культура. Ruby-сообщество исторически сильнее держится за BDD-стиль, но TDD и BDD доступны в обоих языках: в Python есть behave и pytest-bdd, в Ruby Cucumber.
Если с Ruby вы не работали, скажите это и сравнивайте с тем, что знаете точно. Уверенный рассказ о своей связке pytest, фикстур и моков ценнее пересказа чужих статей.
Где спотыкаются
Утверждают, что Ruby «про BDD», а Python «про TDD». Это подходы к разработке, а не свойство языка.
Патчат не то место: patch("module_a.func"), когда код сделал from module_a import func внутри module_b. Подмена не срабатывает, и тест ходит в настоящий код.
Сравнивают по поверхностным признакам вроде «в Python структура строже», не называя ни одного инструмента, которым пользовались сами.