TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #120 7.99K
Я и подумать не мог, что для bash существует фреймворк для написания юнит тестов. Но недавно в одном проекте увидел и, честно говоря поплыл. Начал разбираться, что за странные конструкции в скриптах и по итогу вышел на фреймворк который называется bashunit.

С одной стороны это удивительно и какое-то безумие, ну а с другой если в скрипте есть логика, почему бы не покрыть ее автотестами.

Bashunit это минималистичная библиотека тестирования Bash. Тестируйте свои bash-скрипты самым быстрым и простым способом.

Давай посмотрим как это работает и напишем первый тест:

Устанавливаем:

curl -s https://bashunit.typeddevs.com/install.sh | bash
ln ~/lib/bashunit /usr/local/sbin/bashunit

Все это добро залетит в папку: ~/lib/bashunit. Ну и симлинк сделаем для удобства. Если посмотреть исходник bashunit, то увидим что, оно тоже написано на bash. Bash тестирует bash, красиво.

✅ Кто не знал, символ ~ означает домашнюю директорию текущего пользователя. А то сейчас начнешь искать, куда же эта тварь установилась.

Теперь создаем папку где будем складывать тесты: mkdir ~/tests. В этой папке создаем файл first_test.sh и закидываем в него такой код:

#!/bin/bash

var="hello"

function test_var_equals_hello() {
assert_equals "hello" $var
}

Запускаем:

cd ~/
bashunit ./tests

Получаем результат теста: All tests passed

bashunit - 0.8.0
Running first_test.sh
✓ Passed: Var equals hello

Tests: 1 passed, 1 total
Assertions: 1 passed, 1 total
All tests passed
Time taken: 133 ms

Assert_equals принимает 2 параметра, первый = ожидаемый результат, второй = фактический результат.

Получается такое: Переменная var у меня равна «hello», ожидаемый результат в тесте тоже «hello». Происходит сравнение и успешное завершение. Но если поменять значение var на что-то другое, то получим ошибку.

bashunit - 0.8.0
Running first_test.sh
✗ Failed: Var equals hello
Expected 'hello'
but got 'fuck'

Tests: 1 failed, 1 total
Assertions: 1 failed, 1 total
Some tests failed
Time taken: 128 ms

Помимо assert_equals, есть куча других методов проверки: assert_contains, assert_empty, assert_matches, assert_exit_code, assert_array_contains, assert_successful_code, assert_general_error, assert_command_not_found, assert_file_exists, assert_is_file и т.п.

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

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

Если ты девопс и делаешь какое-нибудь тестовое задание связанное с написанием скриптов. Добавь автотесты и твои шансы получить оффер намного повысятся. Техдиры такое любят. Сразу видно, что человек следует бест-практикам и работает на результат, а не за деньги 📺

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

💩 Официальный сайт фреймворка
🐱 Страница проекта на github
🐱 Старенькая альтернатива shunit2

Увидимся!

tags: #linux #bash #qa
—
💩 @bashdays
  • 👍 103
More from @bashdays
  1. Sep 29, 2026Самый жаркий холивар в команде — это не systemd, а какие заказать роллы на всю команду. Од…
  2. Sep 24, 2026Post #1565
  3. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  4. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  5. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
  6. Sep 9, 2026Всем привет, с вами TagdTagd! Я тут вынужденно перешёл на MAX. Просто Telegram перестал ра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →