Как использовать библиотеку модульного тестирования Unity C ThrowTheSwitch?

#c #unit-testing #gcc #unity-test-framework

Вопрос:

Как использовать библиотеку модульного тестирования Unity C ThrowTheSwitch?

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

Вот Мой код: это mytest.c

 int testValue = 45;

int testThisPass(int idx)
{
    if idx == 42
        return 1;
    
    return 0;
}

int testThisNotPass(int idx)
{
    return 42;
} 
 

это mytest.h

 int testThisPass(int idx);
int testThisNotPass(int idx);
 

это mytestMain.c

 #include "unity.h"
#include "unity_internals.h"
#include "mytest.h"
#include <stdio.h>

void setUp(void) {
    //testValue = 40;
}

void tearDown(void) {
    // clean stuff up here
}

void test_function_should_doBlahAndBlah(void) {
    TEST_ASSERT_EQUAL(1,testThisPass(42));
}

void test_function_should_doAlsoDoBlah(void) {
    TEST_ASSERT_EQUAL(42, testThisNotPass(5));
}

// not needed when using generate_test_runner.rb
int main(void) {
    UNITY_BEGIN();
    RUN_TEST(test_function_should_doBlahAndBlah);
    RUN_TEST(test_function_should_doAlsoDoBlah);
    return UNITY_END();
}
 

И это ошибка, которую я получил, когда пытался скомпилировать mytestMain.c :

 /usr/bin/ld: /tmp/ccOOjz1w.o: in function `test_function_should_doBlahAndBlah':
mytestMain.c:(.text 0x24): undefined reference to `testThisPass'
/usr/bin/ld: mytestMain.c:(.text 0x43): undefined reference to `UnityAssertEqualNumber'
/usr/bin/ld: /tmp/ccOOjz1w.o: in function `test_function_should_doAlsoDoBlah':
mytestMain.c:(.text 0x58): undefined reference to `testThisNotPass'
/usr/bin/ld: mytestMain.c:(.text 0x77): undefined reference to `UnityAssertEqualNumber'
/usr/bin/ld: /tmp/ccOOjz1w.o: in function `main':
mytestMain.c:(.text 0x8e): undefined reference to `UnityBegin'
/usr/bin/ld: mytestMain.c:(.text 0xa6): undefined reference to `UnityDefaultTestRun'
/usr/bin/ld: mytestMain.c:(.text 0xbe): undefined reference to `UnityDefaultTestRun'
/usr/bin/ld: mytestMain.c:(.text 0xc3): undefined reference to `UnityEnd'
collect2: error: ld returned 1 exit status
 

Что я должен делать, чтобы работать? Что я здесь пропустил?

Комментарии:

1. Это ошибка компоновщика. Как вы это составляете? Вы компилируете все исходные файлы, связываете их вместе, а также связываете unity?

Ответ №1:

Проблема заключалась в том, что я был связан с ними в единстве. когда я включаю его, он работает.