开源播放器CicadaPlayer单元测试之Googletest和cmake

简介: CicadaPlayer在Mac和Linux下使用Googletest结合cmake进行单元测试,并且可以在Travis服务器上进行单元测试,下面我们就来介绍一下如何实现 使用cmake整合googletest 首先呢,我们需要“安装”Googletest,这里呢,我们直接使用cmake的FetchContent功能,直接使用,无需手动安装 我们可以建立一个cmake

CicadaPlayer在Mac和Linux下使用Googletest结合cmake进行单元测试,并且可以在Travis服务器上进行单元测试,下面我们就来介绍一下如何实现

使用cmake整合googletest

首先呢,我们需要“安装”Googletest,这里呢,我们直接使用cmake的FetchContent功能,直接使用,无需手动安装

我们可以建立一个cmake文件,比如GoogleTest.cmake

此文件参考cmake-cookbook为了工程上使用方便,我做了一下提炼

include(FetchContent)

FetchContent_Declare(
        googletest
        GIT_REPOSITORY https://github.com/google/googletest.git
        GIT_TAG release-1.8.0
)

FetchContent_GetProperties(googletest)

if (NOT googletest_POPULATED)
    FetchContent_Populate(googletest)

    # Prevent GoogleTest from overriding our compiler/linker options
    # when building with Visual Studio
    set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
    # Prevent GoogleTest from using PThreads
    set(gtest_disable_pthreads ON CACHE BOOL "" FORCE)

    # adds the targers: gtest, gtest_main, gmock, gmock_main
    add_subdirectory(
            ${googletest_SOURCE_DIR}
            ${googletest_BINARY_DIR}
    )

    # Silence std::tr1 warning on MSVC
    if (MSVC)
        foreach (_tgt gtest gtest_main gmock gmock_main)
            target_compile_definitions(${_tgt}
                    PRIVATE
                    "_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING"
                    )
        endforeach ()
    endif ()
endif ()

set(CMAKE_CXX_FLAGS "-fprofile-instr-generate -fcoverage-mapping")

引用googletest

在需要使用的地方直接

include(GoogleTest.cmake)

就可以了,而一般情况下一个工程都会有很多的单元测试,一般的做法呢,我们创建一个根CMakeLists文件,在这个根CMakeLists文件中引用这个Googletest.cmake文件即可,如

...
include(GoogleTest.cmake) add_subdirectory(dataSource) #add_subdirectory(render) add_subdirectory(demuxer) add_subdirectory(decoder)
...

这样每个子目录下的测试文件都可以直接使用googletest了

...
enable_testing() add_test( NAME dataSourceTest COMMAND $<TARGET_FILE:dataSourceTest> )
...

这样就添加了一个单元测试

为ctest优化CMakeLists

如果你在每个子目录的CMakeLists中添加自己的单元测试,当然是没有问题,这样的好处是,在你新添加子目录后,只需要在这个根CMakeLists中 add_subdirectory就可以了,不需要其他修改。但是如果你准备使用ctest做单元测试,那么你就需要先进入每一个子目录下,然后再执行,如果执行完单元测试后还需要做些别的,如覆盖率统计,那么整个流程就比较复杂了。并且最麻烦的是不能多任务执行了。

我在这里选的是另外一种方法,add_test写在根CMakeLists中,这样在这个根目录下执行ctest就可以了,并且支持多任务并行执行

可参考CMakeLists.txt

project(frameworkUintTest)
cmake_minimum_required(VERSION 3.15)


include(GoogleTest.cmake)
add_subdirectory(dataSource)
#add_subdirectory(render)
add_subdirectory(demuxer)
add_subdirectory(decoder)

enable_testing()

add_test(
        NAME dataSourceTest
        COMMAND $<TARGET_FILE:dataSourceTest>
)

#add_test(
#        NAME renderTest
#        COMMAND $<TARGET_FILE:renderTest>
#)

add_test(
        NAME demuxerUnitTest
        COMMAND $<TARGET_FILE:demuxerUnitTest>
)

add_test(
        NAME decoderUnitTest
        COMMAND $<TARGET_FILE:decoderUnitTest>
)

 

如在Travis服务器上

https://github.com/alibaba/CicadaPlayer/blob/develop/.travis.yml

  - cd mediaPlayer/tests/
  - ctest -j8 --output-on-failure

如此就可以了

爱词霸
 
 
划词翻译
自动发声
自动添加生词本
相关文章
|
2月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
181 1
Metasploit Framework 6.4.95 (macOS, Linux, Windows) - 开源渗透测试框架
|
3月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.90 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.90 (macOS, Linux, Windows) - 开源渗透测试框架
379 1
Metasploit Framework 6.4.90 (macOS, Linux, Windows) - 开源渗透测试框架
|
3月前
|
安全 Linux 网络安全
Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.88 (macOS, Linux, Windows) - 开源渗透测试框架
545 0
|
5月前
|
人工智能 自然语言处理 监控
一文看懂开源Coze如何让测试效率飙升
Coze是测试工程师的AI引擎,支持私有部署与零代码测试,提升效率并降低成本。覆盖智能用例生成、数字员工值守、缺陷分析、多模态报告与安全测试五大场景,助力测试智能化转型。
|
7月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架
197 4
Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架
|
8月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
919 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
8月前
|
人工智能 自然语言处理 测试技术
自然语言生成代码一键搞定!Codex CLI:OpenAI开源终端AI编程助手,代码重构+测试全自动
Codex CLI是OpenAI推出的轻量级AI编程智能体,基于自然语言指令帮助开发者高效生成代码、执行文件操作和进行版本控制,支持代码生成、重构、测试及数据库迁移等功能。
1510 0
自然语言生成代码一键搞定!Codex CLI:OpenAI开源终端AI编程助手,代码重构+测试全自动
|
8月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
220 0
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
|
11月前
|
数据挖掘 测试技术 项目管理
2025年测试用例管理看这一篇就够了 ----Codes 开源免费、全面的测试管理解决方案
Codes 是国内首款重新定义 SaaS 模式的开源项目管理平台,支持云端认证、本地部署、全部功能开放,并且对 30 人以下团队免费。它通过整合迭代、看板、度量和自动化等功能,简化测试协同工作,使敏捷测试更易于实施。并提供低成本的敏捷测试解决方案,如同步在线离线测试用例、流程化管理缺陷、低代码接口自动化测试和 CI/CD,以及基于迭代的测试管理和测试用时的成本计算等,践行敏捷测试。
2025年测试用例管理看这一篇就够了 ----Codes 开源免费、全面的测试管理解决方案
|
10月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架
163 0
Metasploit Framework 6.4.49 (macOS, Linux, Windows) - 开源渗透测试框架