Начало

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

Из имеющихся вариантов были cmockery, cunit и cmocka. cunit я не смог собрать под mac os x (было несколько лениво). cmockery, как я понял используется в cmocka и даже не рассматривался мной, но мб и крутая штука.

Итак - юзаю cmocka

В atom для запуска я использую atom-script. Он довольно тупой, поведение для C-файлов по умолчанию - натравить gcc и выполнить что получилось. Как передавать параметры gcc через atom-script - неизвестно. Проблема начинается в том, что для сборки тестов необходима явная линковка с cmocka, т.е. нужно передать gcc параметр -lcmocka.

Казалось бы, ну ок, в чём проблема, в Makefile это пропиши и будет тебе счастье. Есть в принципе плагин make-runner-panel, но у него очень большие проблемы с удобством использования, по крайней мере в mac os x (в linux полагаю всё значительно лучше).

Итак, Makefile мы заюзать не можем, но хотим поведение почти как у nosetests (вот с ними всё вообще охуенно, я такую же херню хочу для си, это просто царская хуита будет), что же нам делать?

Суперкостыль

run_tests.sh

#!/bin/bash

mkdir -p /tmp/tests/
for test in tests/*.c; do
        bin=/tmp/${test%.c}
        rm -f $bin
        gcc $test -lcmocka -o $bin
        echo $bin
        $bin
done

После этого жахаем cmd + shift + i, прописываем в поле command:

./run_tests.sh

выполняем chmod a+x run_tests.sh

ну и радуемся жизни в принципе:

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

Минусы cmocka

Вообще это по идее немного не по теме, но как-то уёбищно слегка на мой взгляд вот это в каждом тесте:

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>

без setjmp cmocka работать не хочет вообще ни в какую.

Ссылоньки

https://cmocka.org/ https://atom.io/