2015-05-24 2 views
3

Я хотел бы использовать платформу тестирования модуля Catch для тестирования моих проектов. Я читал учебник, как писать тесты, это было довольно просто. Я пытался создать действительно простой проект в Qt Creator, который не включают в себя следующие файлы:Уточнить модульные тесты в создателе QT - несколько определений основных

main.cpp 
tests.cpp 
factorial.cpp 
factorial.h 
catch.hpp 

main.cpp:

#include <stdio.h> 
#include "factorial.h" 

int main(void) 
{ 
    printf("%d", factorial(5)); 
    return 0; 
} 

tests.cpp:

#define CATCH_CONFIG_MAIN 
#include "catch.hpp" 
#include "factorial.h" 

TEST_CASE("factorial on valid numbers", "[factorial]") { 
    REQUIRE(factorial(1) == 1); 
    REQUIRE(factorial(5) == 120); 
    REQUIRE(factorial(10) == 3628800); 
} 

factorial.cpp:

#include "factorial.h" 

int factorial(int number) 
{ 
    if(number < 0) 
     return -1; 
    int result = 1; 
    for(int i = number; i > 0; i--) 
     result *= i; 
    return result; 
} 

factorial.h:

#ifndef FACTORIAL 
#define FACTORIAL 

int factorial(int number); 

#endif // FACTORIAL 

и catch.hpp является основой для улова блок тестирует

Я кодирования в C, а не C++, расширение «.cpp» только из-за уловом, который не работает с файлами, имеющими расширение ".c"

Существует еще один файл: testing.pro, который содержит

Q

MAKE_CFLAGS += -std=c99 -pedantic -Wall -Wextra 
TEMPLATE = app 
CONFIG += console 
CONFIG -= app_bundle 
CONFIG -= qt 

SOURCES += \ 
    main.cpp \ 
    factorial.cpp \ 
    tests.cpp 

include(deployment.pri) 
qtcAddDeployment() 

HEADERS += \ 
    catch.hpp \ 
    factorial.h 

Этот файл был создан создателем QT.

Хорошо, и моя проблема в том, что когда я пытаюсь построить этот проект, я получаю ошибку: «множественное определение main».

Я понимаю. У меня есть основной файл main.cpp, а также в tests.cpp. Но я не знаю, что мне делать, чтобы заставить его работать. Я хочу иметь проект с полностью работающим основным и файлом с тестами, где я могу проверить свои функции. Я искал почти везде. Думаю, мне нужно каким-то образом организовать свой проект в создателе QT, но я понятия не имею, как это сделать. Я понятия не имею, как это должно работать.

Спасибо за советы

ответ

1

Вам действительно есть две сети:

  1. один в main.cpp
  2. поставляемым прилов, по Вашему желанию, через макроопределении CATCH_CONFIG_MAIN.

Решение состоит в том, чтобы либо удалить макрос, либо использовать основной объект, либо не использовать основную часть, чтобы использовать созданный с помощью Catch.

Дополнительная информация здесь: Catch: Supplying your own main()

Смежные вопросы