Я хотел бы использовать платформу тестирования модуля 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, но я понятия не имею, как это сделать. Я понятия не имею, как это должно работать.
Спасибо за советы