3

プロジェクトのテストに 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 でコーディングしています。拡張子「.cpp」は、拡張子「.c」を持つファイルでは機能しない catch が原因です。

もう 1 つのファイルがあります: 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 作成者によって生成されました。

OK、私の問題は、このプロジェクトをビルドしようとすると、「メインの複数定義」というエラーが発生することです。

わかった。main.cpp ファイルと tests.cpp にメインがあります。しかし、私はそれを機能させるために何をすべきかわかりません。私は自分の機能をテストできる、完全に機能するメインとテスト付きのファイルを備えたプロジェクトを持ちたいと思っています。私はほぼすべての場所を検索しました。QTクリエーターでどうにかしてプロジェクトを整理する必要があると思いますが、その方法がわかりません。私はそれがどのように機能するべきか分かりません。

アドバイスありがとう

4

1 に答える 1

1

あなたは確かに2つのメインを持っています:

  1. main.cpp に 1 つ
  2. ユーザーの要求に応じて、CATCH_CONFIG_MAIN マクロ定義を通じて Catch によって提供されるもの。

解決策は、マクロを削除してメインを使用するか、メインを除外して Catch で生成されたものを使用することです。

詳細はこちら: Catch: Supplying your own main()

于 2015-07-08T20:37:19.023 に答える