无法运行catch测试:从不使用MACRO CATCH_CONFIG_RUNNER

时间:2017-04-22 02:42:33

标签: cmake try-catch clion

我正在尝试使用catch在Clion中运行我的第一个测试。 Clion为MACRO CATCH_CONFIG_RUNNER显示一个错误,用下划线标出:无法运行catch测试:从不使用MACRO CATCH_CONFIG_RUNNER。该程序编译并运行正常,但我无法运行测试。我添加了一个配置来运行测试,但是如果我做Clion只是旋转,同时显示:实例化测试。我错过了什么?请参阅下面的代码和makefile。

//This program reads identifies the largest # of three integers
#include <iostream>
#define CATCH_CONFIG_RUNNER
#include "catch.hpp"

using namespace std;

int largestInt ( int x, int y, int z); //function declaration/prototype

TEST_CASE("Find the largest of three numbers", "[eight is the answer]") {
    REQUIRE(largestInt(8, 5, 4) == 8);
}

int main() {
    int num1, num2, num3, max;

    cout << "Please enter three integers: ";
    cin>> num1 >> num2 >> num3;

    max = largestInt(num1, num2, num3);

    cout << "The largest number is " << max;

    return 0;
}

//this function returns the largest of three ints
int largestInt ( int x, int y, int z) {  //function definition
    int max = x;

    if (y > max) {
        max = y;
    }

    if (z > max) {
        max = z;
    }
    return max;
}

cmake_minimum_required(VERSION 3.7)
project(6_3)

set(CMAKE_CXX_STANDARD 14)
include_directories(/home/mgalactico/Documents/Deitel_Exercises/catch)

set(SOURCE_FILES main.cpp ../catch/catch.hpp)
add_executable(6_3 ${SOURCE_FILES})

1 个答案:

答案 0 :(得分:1)

您已编写自己的main()函数。我假设您有充分的理由不使用CATCH_CONFIG_MAIN宏生成一个。这里缺少的是告诉程序何时运行测试。这可以在主函数的代码之前,之间或之后。 Catch不会猜测并为您决定。您可以通过调用:

来运行测试
Catch::Session().run(argc, argv);

这将创建一个Catch :: Session实例,也可以在单独的指令中完成,然后调用applyCommandLine

Catch::Session session;
auto result = session.applyCommandLine( argc, argv );
// error handling ( result ) ...
...

传递命令行参数,因为catch的行为是以这种方式配置的。这是由CLion使用的,其中Catch现在(2017.1或更高版本)已集成。这意味着如果您在配置中选择了catch,则会获得绿色/红色进度条测试运行器以及统计信息和报告。