【发布时间】:2017-02-18 03:24:44
【问题描述】:
我一直在寻找解决此问题的方法,但似乎无法找出发生这种情况的原因。我将 CMake 用于一个小项目,我想添加单元测试 cmakes add_test。它在测试通过时运行良好,但当它们失败时,我会收到一条我无法解释的奇怪错误消息。
我做了一个小例子来说明会发生什么。
CMakeLists.txt
cmake_minimum_required (VERSION 2.6)
project (TestExample)
enable_testing()
add_executable(succeedExample succeed.cpp)
add_executable(failExample fail.cpp)
add_test(NAME succeedTest COMMAND succeedExample)
add_test(NAME failTest COMMAND failExample)
成功.cpp
int main()
{
return 0;
}
失败.cpp
int main()
{
return 1;
}
我使用 Visual Studio 2015,在构建 RUN_TESTS 目标时,出现以下错误:
Severity Code Description Project File Line Suppression State
Error MSB3073 The command "setlocal
"C:\Program Files (x86)\CMake\bin\ctest.exe" --force-new-ctest-process -C Debug
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
:VCEnd" exited with code 8. RUN_TESTS C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppCommon.targets 133
但是,如果我将 fail.cpp 更改为 return 0; 我会得到
1>------ Build started: Project: RUN_TESTS, Configuration: Debug Win32 ------
1> Test project C:/Users/.../projects/cmaketestexample/build
1> Start 1: succeedTest
1> 1/2 Test #1: succeedTest ...................... Passed 0.01 sec
1> Start 2: failTest
1> 2/2 Test #2: failTest ......................... Passed 0.02 sec
1>
1> 100% tests passed, 0 tests failed out of 2
1>
1> Total Test time (real) = 0.03 sec
========== Build: 1 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========
谁能指出我的解决方案来解决这个问题?我错过了什么明显的东西吗?
谢谢:)
编辑
Visual Studio 版本为 14.0(Visual Studio 2015 社区)
Cmake 3.5.2 - 但我在 CMakeLists.txt 中将版本设置为 2.6。
EDIT2
在命令行上运行ctest -C Debug:
Test project C:/Users/.../projects/cmaketestexample/build
Start 1: succeedTest
1/2 Test #1: succeedTest ...................... Passed 0.02 sec
Start 2: failTest
2/2 Test #2: failTest .........................***Failed 0.02 sec
50% tests passed, 1 tests failed out of 2
Total Test time (real) = 0.07 sec
The following tests FAILED:
2 - failTest (Failed)
Errors while running CTest
将 fail.cpp 更改为
#include <iostream>
int main()
{
std::cout << "Does it work now?" << std::endl;
return 1;
}
没有区别。
EDIT3
在 Ubuntu 14.04.4 LTS 上出现类似错误 使用
- cmake 版本 3.2.2
- GNU Make 3.81
- g++ (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
【问题讨论】:
-
CMake和visual studio有哪些版本?
-
在问题中添加了该信息。
-
您可以尝试在二进制输出目录中的命令行上运行
ctest -C Debug以查看潜在的错误消息。或者 - 只是一个猜测 - 尝试将任何stdout/stderr输出添加到失败的测试中,看看它是否有所作为。有关替代方案,请参见例如here. -
我在另一个编辑中将两次尝试添加到问题中。
-
请尝试 CMake 3.6,如果仍然失败,请尝试 3.7-rc1。 Visual Studio 2015 对于 CMAke 3.5 来说可能太新了。
标签: c++ unit-testing cmake