我正在尝试使用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})
答案 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,则会获得绿色/红色进度条测试运行器以及统计信息和报告。