【问题标题】:Calling Unittest++ from cmake created makefile从 cmake 调用 Unittest++ 创建的 makefile
【发布时间】:2014-01-09 02:13:28
【问题描述】:

我最近开始学习 cmake,遇到了一个小问题。我得到了我的可执行文件和单元测试,可以从生成的 makefile 编译,没有问题。如果我在构建目录中运行./test,则在 UnitTest++ 中创建的测试会按预期运行并完成,并打印结果。有没有办法让make test 简单地运行测试可执行文件而不是在 ctest 框架中运行它,还是我应该以不同的方式来解决这个问题?

这是我的代码的最小工作示例:

src/main/main.c 是一个简单的空主函数

src/test/testMain.cpp:

#include <UnitTest++/UnitTest++.h>

TEST(FailSpect)
{
    CHECK(false);
}

int main()
{
    UnitTest::RunAllTests();
}

CMakeLists.txt:

cmake_minimum_required( VERSION 2.6 )
project( myProject)

enable_testing()

set( myProjectMain
    src/main/main.c
    )

set( myProjectSrc
    )

set( myProjectTestSrc
    src/test/testMain.cpp
    )

add_executable( myExecutable ${myProjectMain} ${myProjectSrc} )
add_executable( testSuite ${myProjectTestSrc} ${myProjectSrc} )

target_link_libraries( testSuite UnitTest++ )

add_test( testExe testSuite )

make test 输出:

Running tests...
Start processing tests
Test project /myProjectDir/build
  1/  1 Testing testExe                       Passed

100% tests passed, 0 tests failed out of 1

./testSuite 输出:

/myProjectDir/src/test/testMain.cpp:5: error: Failure in FailSpect: false
FAILURE: 1 out of 1 tests failed (1 failures).
Test time: 0.00 seconds.

【问题讨论】:

    标签: cmake


    【解决方案1】:

    我已经弄清楚了如何做到这一点。首先删除这些行:

    enable_testing()
    

    add_test(testExe testSuite)
    

    并用以下行替换它们:

    add_custom_target(test ./testExe
        DEPENDS ./testExe)
    

    在 CMakeLists.txt 文件的末尾。现在make (all) 构建了测试和主程序。如果一切都已构建,那么make test 将检查测试是否已构建并运行它们,生成:

    [100%] Built target testExe
    /myProjectDir/src/test/testMain.cpp:5: error: Failure in FailSpect: false
    FAILURE: 1 out of 1 tests failed (1 failures).
    Test time: 0.00 seconds.
    [100%] Built target test
    

    如果测试过期(例如在make clean 之后),那么make test 将产生:

    [100%] Building CXX object CMakeFiles/testExe.dir/src/test/testMain.cpp.o
    Linking CXX executable testExe
    [100%] Built target testExe
    /myProjectDir/src/test/testMain.cpp:5: error: Failure in FailSpect: false
    FAILURE: 1 out of 1 tests failed (1 failures).
    Test time: 0.00 seconds.
    [100%] Built target test
    

    【讨论】:

      猜你喜欢
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多