Как использовать «Unity» для модульного тестирования кода C на Mac (Lion)? - PullRequest
1 голос
/ 19 марта 2012

Позвольте мне начать с того, что я не являюсь разработчиком C, и я очень мало знаю о написании реального кода на C. Я провел некоторое исследование, чтобы найти фреймворк xUnit, который я могу использовать для написания тестов для кода C, и на основе того, что я нашел, похоже, что Unity - это то, с чем я хочу пойти. Это кажется достаточно простым, но я действительно просто не знаю, что делать после загрузки zip-файла с веб-сайта Unity. Похоже, что он не имеет нормальной установки configure / make / make, и если это произойдет, я не уверен, что это то, что я должен использовать в любом случае. Это, однако, поставляется с некоторыми задачами рейка, но ни одна из них, казалось, не была какой-либо задачей "установки". В качестве последнего средства я попытался просто скопировать 3 исходных файла с моим кодом (что я действительно надеюсь, что это неправильно), но когда я пытаюсь это сделать, я получаю сообщение об ошибке, пытаясь скомпилировать мой файл c с помощью gcc, но Я думаю, что это должно работать. Вот мои настройки:

src/
  mycode.c
  unity.c
  unity.h
  unity_internals.h

Вот источник mycode.c

/* mycode.c */
#include "unity.h"

void test_sample(void)
{
    TEST_ASSERT_EQUAL_INT(0, 0);
}

Когда я бегу gcc mycode.c, я получаю:

Undefined symbols for architecture x86_64:
  "_main", referenced from:
      start in crt1.10.6.o
  "_UnityAssertEqualNumber", referenced from:
      _test_sample in ccyHByv6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

(я получаю похожую ошибку, когда пытаюсь скомпилировать unity.c с помощью gcc). То, что я предполагаю, означает, что код, который поставляется с единицей, требует компилятора, отличного от того, что у меня есть:

i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.9.00)

или, возможно, Unity не совместим с 64-разрядным процессором ... (Я работаю в Mac OS 10.7.3 с процессором Intel Core 2 Duo 2,4 ГГц - еще одна вещь, которая может или не может быть относительной, это то, что У меня есть XCode версии 4.3 (4E109), а также инструменты командной строки для XCode). На данный момент я просто хватаюсь за соломинку, и я нахожусь над головой.

У меня вопрос: как правильно пройти процедуру создания сторонней библиотеки C, такой как Unity, и сделать ее доступной для моего кода C? Нужно ли мне устанавливать что-то вроде Python или Ruby или добавлять что-то к моему пути, как в Java или что-то еще? Разве не стоит просто добавить код Unity в мою работу? Я что-то не так делаю или Unity или оба? Я действительно просто хочу иметь возможность тестировать код диска C с помощью Unity. Любая помощь будет принята с благодарностью. Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 22 марта 2012

Я разобрался в своей проблеме. Оказывается, что для единства требуется, чтобы вы определили функции setup и teardown, а если нет, вы получите ошибки, подобные той, с которой я столкнулся.

1 голос
/ 19 марта 2012

Сначала попробуйте 'gcc * .c -o mytest'. Это скомпилирует все исходные файлы C в объектные файлы, а затем свяжет их вместе в двоичный файл «mytest». Имейте в виду, что все исходные файлы C должны быть скомпилированы в объектные файлы, прежде чем они могут быть связаны вместе. (Библиотека - это просто набор упакованных объектных файлов.)

Если у вас установлена ​​библиотека Unity в / usr / lib, вы можете сделать что-то вроде 'gcc mycode.c -lunity -o mytest'. Если у вас есть библиотека Unity, расположенная в текущем каталоге, вы можете выполнить команду «gcc mycode.c ./unity.a -o mytest». Это говорит компилятору искать файл с именем «unity.a» в текущем каталоге. В некоторых библиотеках создаются файлы .so (файлы «общих объектов», похожие на библиотеки DLL в Windows). Замена 'unity.a' на 'unity.so' должна сработать, если это так. (Я предполагаю, что среда Unix / Linux здесь.)

В качестве альтернативы Unity, посмотрите на Google Test, который можно использовать с кодом Си. Я знаю, что это поддерживается и на Mac. Основным преимуществом является большое и активное сообщество. Дополнительная информация о Google Test из другого SO-вопроса: Можно ли использовать Google Test для тестирования кода C?

...