在QT创建者中捕获单元测试 - 主要的多个定义

时间:2015-05-24 09:12:32

标签: c unit-testing qt-creator catch-unit-test

我想使用Catch单元测试框架来测试我的项目。我读教程如何编写测试,这很简单。我试图在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是单元测试的catch框架

我用C编码,而不是C ++,扩展&#34; .cpp&#34;只是因为catch,它不适用于具有扩展名&#34; .c&#34;

的文件

还有一个文件: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创建者生成。

好的,我的问题是,当我尝试构建这个项目时,我收到错误:&#34; main&#34;的多重定义。

我明白了。我在main.cpp文件和tests.cpp中都有main。但我不知道,我该怎么做才能让它发挥作用。我想要项目,完全工作的主要文件和测试文件,我可以测试我的功能。我几乎到处搜索。我想我必须以某种方式在QT创建者中组织我的项目,但我不知道如何。我不知道它应该如何运作。

感谢您的建议

1 个答案:

答案 0 :(得分:1)

你确实有两个主电源:

  1. 一个在main.cpp
  2. 由Catch根据您的要求通过CATCH_CONFIG_MAIN宏定义提供的。
  3. 解决方案是删除宏并使用你的主,或省略你的主要使用Catch生成的。

    此处有更多信息:Catch: Supplying your own main()