PageSourceSearch

https://www.cccolt.top/assets/12.html-9ll1VQGJ.js

js cccolt.top collected 2026-10-08 05:01:42 UTC 51,012 bytes, 114 lines download raw bytes

1import{_ as k,c as d,e as h,d as p,w as e,r,o as c,a as s,b as i}from"./app-Clroc_5r.js";const g={};function A(y,a){const t=r("CodeTabs");return c(),d("div",null,[a[6]||(a[6]=h(`<h4 id="教学视频" tabindex="-1"><a class="header-anchor" href="#教学视频"><span>教学视频</span></a></h4><div class="hint-container tip"><p class="hint-container-title">即将到来 ...</p><ul><li>【12】CMake:CTest 工具</li></ul></div><hr><h2 id="_1-前言" tabindex="-1"><a class="header-anchor" href="#_1-前言"><span>1. 前言</span></a></h2><p>CMake 提供了一个名为 CTest 的工具,用于管理和运行测试用例。主要功能有</p><ul><li>自动发现和运行测试</li><li>并行测试执行</li><li>测试结果收集和报告</li></ul><div class="hint-container tip"><p class="hint-container-title">提示</p><p>测试一般分为以下几种类型:</p><ul><li>单元测试 —— 它是对软件中的最小可测试单元进行检查和验证的过程。单元测试通常是由开发人员编写的,用于验证代码的正确性。单元测试的目的是确保代码的每个部分都能正常工作,从而提高代码的质量。单元测试一般隔离性强,不依赖外部组件。</li><li>集成测试 —— 它是对软件中的多个模块进行联合测试的过程。集成测试通常是由测试人员和开发人员共同编写的,用于验证软件的整体功能。集成测试的目的是确保软件的各个模块能够协同工作,从而提高软件的质量。集成测试一般需要测试环境。</li><li>系统测试 —— 它是对软件的整体功能进行测试的过程。系统测试通常是由测试人员编写的,用于验证软件的整体功能。系统测试的目的是确保软件的整体功能能够满足用户的需求。系统测试一般需要完整的测试环境,主要在功能、性能、负载、安全等方面进行测试。</li></ul></div><h2 id="_2-ctest-的基本介绍" tabindex="-1"><a class="header-anchor" href="#_2-ctest-的基本介绍"><span>2. CTest 的基本介绍</span></a></h2><p>在安装 CMake 的同时,CTest 也会被安装。因此,我们可以直接在 <code>CMakeLists.txt</code> 文件中使用 CTest 相关的内容。</p><h3 id="_2-1-启用测试" tabindex="-1"><a class="header-anchor" href="#_2-1-启用测试"><span>2.1 启用测试</span></a></h3><p>在添加测试之前,我们需要在 <code>CMakeLists.txt</code> 文件中启用测试。启用测试的方法是在 <code>CMakeLists.txt</code> 文件中添加</p><div class="language-cmake line-numbers-mode" data-highlighter="shiki" data-ext="cmake" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-cmake"><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">enable_testing</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">()</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p>我们先准备一个简单的计算两数之和的项目,目录如下</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-"><span class="line"><span>Add</span></span>
2<span class="line"><span>├── CMakeLists.txt</span></span>
3<span class="line"><span>├── main.cpp</span></span>
4<span class="line"><span>├── add.cpp</span></span>
5<span class="line"><span>└── add.hpp</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>`,14)),p(t,{id:"75",data:[{id:"<code v-pre>add.cpp</code>"},{id:"<code v-pre>
5add.hpp</code>"},{id:"<code v-pre>main.cpp</code>"}]},{title0:e(({value:n,isActive:l})=>[...a[0]||(a[0]=[s("span",null,[s("code",null,"add.cpp")],-1)])]),title1:e(({value:n,isActive:l})=>[...a[1]||(a[1]=[s("span",null,[s("code",null,"add.hpp")],-1)])]),title2:e(({value:n,isActive:l})=>[...a[2]||(a[2]=[s("span",null,[s("code",null,"main.cpp")],-1)])]),tab0:e(({value:n,isActive:l})=>[...a[3]||(a[3]=[s("div",{class:"language-cpp line-numbers-mode","data-highlighter":"shiki","data-ext":"cpp",style:{"--shiki-light":"#393a34","--shiki-dark":"#dbd7caee","--shiki-light-bg":"#ffffff","--shiki-dark-bg":"#121212"}},[s("pre",{class:"shiki shiki-themes vitesse-light vitesse-dark vp-code"},[s("code",{class:"language-cpp"},[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"#"),s("span",{style:{"--shiki-light":"#1E754F","--shiki-dark":"#4D9375"}},"include"),s("span",{style:{"--shiki-light":"#B5695977","--shiki-dark":"#C98A7D77"}},' "'),s("span",{style:{"--shiki-light":"#B56959","--shiki-dark":"#C98A7D"}},"add.hpp"),s("span",{style:{"--shiki-light":"#B5695977","--shiki-dark":"#C98A7D77"}},'"')]),i(`
6`),s("span",{class:"line"}),i(`
7`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"int"),s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}}," add"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"("),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"int"),s("span",{style:{"--shiki-light":"#B07D48","--shiki-dark":"#BD976A"}}," a"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},","),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}}," int"),s("span",{style:{"--shiki-light":"#B07D48","--shiki-dark":"#BD976A"}}," b"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},")")]),i(`
8`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"{")]),i(`
9`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#1E754F","--shiki-dark":"#4D9375"}},"    return"),s("span",{style:{"--shiki-light":"#393A34","--shiki-dark":"#DBD7CAEE"}}," a "),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"+"),s("span",{style:{"--shiki-light":"#393A34","--shiki-dark":"#DBD7CAEE"}}," b"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},";")]),i(`
10`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"}")])])]),s("div",{class:"line-numbers","aria-hidden":"true",style:{"counter-reset":"line-number 0"}},[s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"})])],-1)])]),tab1:e(({value:n,isActive:l})=>[...a[4]||(a[4]=[s("div",{class:"language-cpp line-numbers-mode","data-highlighter":"shiki","data-ext":"cpp",style:{"--shiki-light":"#393a34","--shiki-dark":"#dbd7caee","--shiki-light-bg":"#ffffff","--shiki-dark-bg":"#121212"}},[s("pre",{class:"shiki shiki-themes vitesse-light vitesse-dark vp-code"},[s("code",{class:"language-cpp"},[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"#"),s("span",{style:{"--shiki-light":"#1E754F","--shiki-dark":"#4D9375"}},"ifndef"),s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}}," ADD_HPP")]),i(`
11`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"#"),s("span",{style:{"--shiki-light":"#1E754F","--shiki-dark":"#4D9375"}},"define"),s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}}," ADD_HPP")]),i(`
12`),s("span",{class:"line"}),i(`
13`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"int"),s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}}," add"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"("),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"int"),s("span",{style:{"--shiki-light":"#B07D48","--shiki-dark":"#BD976A"}}," a"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},","),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}}," int"),s("span",{style:{"--shiki-light":"#B07D48","--shiki-dark":"#BD976A"}}," b"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},");")]),i(`
14`),s("span",{class:"line"}),i(`
15`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"#"),s("span",{style:{"--shiki-light":"#1E754F","--shiki-dark":"#4D9375"}},"endif"),s("span",{style:{"--shiki-light":"#A0ADA0","--shiki-dark":"#758575DD"}}," // ADD_HPP")])])]),s("div",{class:"line-numbers","aria-hidden":"true",style:{"counter-reset":"line-number 0"}},[s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"})])],-1)])]),tab2:e(({value:n,isActive:l})=>[...a[5]||(a[5]=[s("div",{class:"language-cpp line-numbers-mode has-collapsed-lines collapsed","data-highlighter":"shiki","data-ext":"cpp",style:{"--vp-collapsed-lines":"6","--shiki-light":"#393a34","--shiki-dark":"#dbd7caee","--shiki-light-bg":"#ffffff","--shiki-dark-bg":"#121212"}},[s("pre",{class:"shiki shiki-themes vitesse-light vitesse-dark vp-code"},[s("code",{class:"language-cpp"},[s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"#"),s("span",{style:{"--shiki-light":"#1E754F","--shiki-dark":"#4D9375"}},"include"),s("span",{style:{"--shiki-light":"#B5695977","--shiki-dark":"#C98A7D77"}}," <"),s("span",{style:{"--shiki-light":"#B56959","--shiki-dark":"#C98A7D"}},"cstdio"),s("span",{style:{"--shiki-light":"#B5695977","--shiki-dark":"#C98A7D77"}},">")]),i(`
16`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"#"),s("span",{style:{"--shiki-light":"#1E754F","--shiki-dark":"#4D9375"}},"include"),s("span",{style:{"--shiki-light":"#B5695977","--shiki-dark":"#C98A7D77"}}," <"),s("span",{style:{"--shiki-light":"#B56959","--shiki-dark":"#C98A7D"}},"cstdlib"),s("span",{style:{"--shiki-light":"#B5695977","--shiki-dark":"#C98A7D77"}},">")]),i(`
17`),s("span",{class:"line"}),i(`
18`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"#"),s("span",{style:{"--shiki-light":"#1E754F","--shiki-dark":"#4D9375"}},"include"),s("span",{style:{"--shiki-light":"#B5695977","--shiki-dark":"#C98A7D77"}},' "'),s("span",{style:{"--shiki-light":"#B56959","--shiki-dark":"#C98A7D"}},"add.hpp"),s("span",{style:{"--shiki-light":"#B5695977","--shiki-dark":"#C98A7D77"}},'"')]),i(`
19`),s("span",{class:"line"}),i(`
20`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"int"),s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}}," main"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"("),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"int"),s("span",{style:{"--shiki-light":"#B07D48","--shiki-dark":"#BD976A"}}," argc"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},","),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}}," char"),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}}," *"),s("span",{style:{"--shiki-light":"#B07D48","--shiki-dark":"#BD976A"}},"argv"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"[])")]),i(`
21`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"{")]),i(`
22`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#1E754F","--shiki-dark":"#4D9375"}},"    if"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}}," ("),s("span",{style:{"--shiki-light":"#393A34","--shiki-dark":"#DBD7CAEE"}},"argc "),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"<"),s("span",{style:{"--shiki-light":"#2F798A","--shiki-dark":"#4C9A91"}}," 4"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},")")]),i(`
23`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"    {")]),i(`
24`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}},"        printf"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"("),s("span",{style:{"--shiki-light":"#B5695977","--shiki-dark":"#C98A7D77"}},'"'),s("span",{style:{"--shiki-light":"#B56959","--shiki-dark":"#C98A7D"}},"Usage: "),s("span",{style:{"--shiki-light":"#A65E2B","--shiki-dark":"#C99076"}},"%s"),s("span",{style:{"--shiki-light":"#B56959","--shiki-dark":"#C98A7D"}}," <a> <b> <sum>"),s("span",{style:{"--shiki-light":"#A65E2B","--shiki-dark":"#C99076"}},"\\n"),s("span",{style:{"--shiki-light":"#B5695977","--shiki-dark":"#C98A7D77"}},'"'),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},","),s("span",{style:{"--shiki-light":"#B07D48","--shiki-dark":"#BD976A"}}," argv"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"["),s("span",{style:{"--shiki-light":"#2F798A","--shiki-dark":"#4C9A91"}},"0"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"]);")]),i(`
25`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#1E754F","--shiki-dark":"#4D9375"}},"        return"),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}}," -"),s("span",{style:{"--shiki-light":"#2F798A","--shiki-dark":"#4C9A91"}},"1"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},";")]),i(`
26`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"    }")]),i(`
27`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#393A34","--shiki-dark":"#DBD7CAEE"}},"    ")]),i(`
28`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"    int"),s("span",{style:{"--shiki-light":"#393A34","--shiki-dark":"#DBD7CAEE"}}," a "),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"="),s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}}," std"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"::"),s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}},"atoi"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"("),s("span",{style:{"--shiki-light":"#B07D48","--shiki-dark":"#BD976A"}},"argv"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"["),s("span",{style:{"--shiki-light":"#2F798A","--shiki-dark":"#4C9A91"}},"1"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"]);")]),i(`
29`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"    int"),s("span",{style:{"--shiki-light":"#393A34","--shiki-dark":"#DBD7CAEE"}}," b "),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"="),s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}}," std"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"::"),s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}},"atoi"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"("),s("span",{style:{"--shiki-light":"#B07D48","--shiki-dark":"#BD976A"}},"argv"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"["),s("span",{style:{"--shiki-light":"#2F798A","--shiki-dark":"#4C9A91"}},"2"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"]);")]),i(`
30`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"    int"),s("span",{style:{"--shiki-light":"#393A34","--shiki-dark":"#DBD7CAEE"}}," predict "),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"="),s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}}," std"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"::"),s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}},"atoi"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"("),s("span",{style:{"--shiki-light":"#B07D48","--shiki-dark":"#BD976A"}},"argv"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"["),s("span",{style:{"--shiki-light":"#2F798A","--shiki-dark":"#4C9A91"}},"3"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"]);")]),i(`
31`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"    int"),s("span",{style:{"--shiki-light":"#393A34","--shiki-dark":"#DBD7CAEE"}}," sum "),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"="),s("span",{style:{"--shiki-light":"#59873A","--shiki-dark":"#80A665"}}," add"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"("),s("span",{style:{"--shiki-light":"#393A34","--shiki-dark":"#DBD7CAEE"}},"a"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},","),s("span",{style:{"--shiki-light":"#393A34","--shiki-dark":"#DBD7CAEE"}}," b"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},");")]),i(`
32`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#1E754F","--shiki-dark":"#4D9375"}},"    return"),s("span",{style:{"--shiki-light":"#393A34","--shiki-dark":"#DBD7CAEE"}}," sum "),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"=="),s("span",{style:{"--shiki-light":"#393A34","--shiki-dark":"#DBD7CAEE"}}," predict "),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}},"?"),s("span",{style:{"--shiki-light":"#2F798A","--shiki-dark":"#4C9A91"}}," 0"),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}}," :"),s("span",{style:{"--shiki-light":"#AB5959","--shiki-dark":"#CB7676"}}," -"),s("span",{style:{"--shiki-light":"#2F798A","--shiki-dark":"#4C9A91"}},"1"),s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},";")]),i(`
33`),s("span",{class:"line"},[s("span",{style:{"--shiki-light":"#999999","--shiki-dark":"#666666"}},"}")])])]),s("div",{class:"line-numbers","aria-hidden":"true",style:{"counter-reset":"line-number 0"}},[s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"}),s("div",{class:"line-number"})]),s("div",{class:"collapsed-lines"})],-1)])]),_:1}),a[7]||(a[7]=h(`<p>这是一个简单的计算两数之和的项目,需要用户输入 3 个命令行参数,分别是两个加数和预期的和。如果计算结果与预期的和相等,则返回 <code>0</code>,否则返回 <code>-1</code>。然后,我们在 <code>CMakeLists.txt</code> 文件中写入以下内容</p><div class="language-cmake line-numbers-mode" data-highlighter="shiki" data-ext="cmake" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-cmake"><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">cmake_minimum_required</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">VERSION</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> 3.16)</span></span>
34<span class="line"></span>
35<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">project</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(Add)</span></span>
36<span class="line"></span>
37<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">add_library</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(add STA
37TIC add.cpp)</span></span>
38<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">add_executable</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(demo main.cpp)</span></span>
39<span class="line"></span>
40<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">target_link_libraries</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(demo </span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">PRIVATE</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> add)</span></span>
41<span class="line"></span>
42<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">enable_testing</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">()</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>至此,我们完成了测试的前期准备工作。</p><h3 id="_2-2-添加测试" tabindex="-1"><a class="header-anchor" href="#_2-2-添加测试"><span>2.2 添加测试</span></a></h3><p>在 <code>CMakeLists.txt</code> 文件中添加测试的方法是使用 <code>add_test</code> 命令。<code>add_test</code> 命令的语法如下</p><div class="language-cmake line-numbers-mode" data-highlighter="shiki" data-ext="cmake" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-cmake"><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">add_test</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(</span></span>
43<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">  NAME</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> &lt;</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">name</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">&gt;                         </span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 测试的名称,可以随便写,但最好见名知意</span></span>
44<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">  COMMAND</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> &lt;</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">command</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">&gt; [arg1 [arg2 ...]] </span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 测试的命令,可以是一个可执行文件或一个脚本</span></span>
45<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">)</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>其中,<code>name</code> 是测试的名称,<code>command</code> 是测试的命令。我们在 <code>CMakeLists.txt</code> 文件末尾写入以下内容以添加 5 个测试</p><div class="language-cmake line-numbers-mode" data-highlighter="shiki" data-ext="cmake" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-cmake"><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">add_test</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">NAME</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> AddTest.positive </span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">COMMAND</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> demo 1 2 3)</span></span>
46<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">add_test</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">NAME</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> AddTest.negative </span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">COMMAND</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> demo -1 -2 -3)</span></span>
47<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">add_test</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">NAME</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> AddTest.zero </span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">COMMAND</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> demo 0 0 0)</span></span>
48<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">add_test</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">NAME</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> AddTest.mixed </span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">COMMAND</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> demo 1 -2 -1)</span></span>
49<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">add_test</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">NAME</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> AddTest.failed_example </span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">COMMAND</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> demo 1 2 4)</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="_2-3-运行测试" tabindex="-1"><a class="header-anchor" href="#_2-3-运行测试"><span>2.3 运行测试</span></a></h3><p>在项目根目录下执行以下命令,构建项目</p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-shell"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">mkdir</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> build</span></span>
50<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">cd</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> build</span></span>
51<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">cmake</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> ..</span></span>
52<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">cmake</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> --build</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> .</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>然后,我们可以使用以下命令运行测试</p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-shell"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">ctest</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p>运行结果如下</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-"><span class="line"><span>Test project /path/to/Add/build</span></span>
53<span class="line"><span>    Start 1: AddTest.positive</span></span>
54<span class="line"><span>1/5 Test #1: AddTest.positive .................   Passed    0.00 sec</span></span>
55<span class="line"><span>    Start 2: AddTest.negative</span></span>
56<span class="line"><span>2/5 Test #2: AddTest.negative .................   Passed    0.00 sec</span></span>
57<span class="line"><span>    Start 3: AddTest.zero</span></span>
58<span class="line"><span>3/5 Test #3: AddTest.zero .....................   Passed    0.00 sec</span></span>
59<span class="line"><span>    Start 4: AddTest.mixed</span></span>
60<span class="line"><span>
604/5 Test #4: AddTest.mixed ....................   Passed    0.00 sec</span></span>
61<span class="line"><span>    Start 5: AddTest.failed_example</span></span>
62<span class="line"><span>5/5 Test #5: AddTest.failed_example ...........***Failed    0.00 sec</span></span>
63<span class="line"><span></span></span>
64<span class="line"><span>80% tests passed, 1 tests failed out of 5</span></span>
65<span class="line"><span></span></span>
66<span class="line"><span>Total Test time (real) =   0.01 sec</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="_3-与-googletest-结合使用" tabindex="-1"><a class="header-anchor" href="#_3-与-googletest-结合使用"><span>3. 与 GoogleTest 结合使用</span></a></h2><p>GoogleTest 是 Google 开发的一个 C++ 测试框架,它提供了丰富的断言和测试用例管理功能,CMake 也提供了 GoogleTest 相关的宏和函数,可以很方便的将 GoogleTest 与 CTest 集成。</p><h3 id="_3-1-文件准备" tabindex="-1"><a class="header-anchor" href="#_3-1-文件准备"><span>3.1 文件准备</span></a></h3><p>首先,我们可以直接删除 <code>main.cpp</code> 文件,但可以添加一个测试文件 <code>test_add.cpp</code>,变更后的目录结构如下</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-"><span class="line"><span>Add</span></span>
67<span class="line"><span>├── CMakeLists.txt</span></span>
68<span class="line"><span>├── add.cpp</span></span>
69<span class="line"><span>├── add.hpp</span></span>
70<span class="line"><span>└── test_add.cpp</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><code>test_add.cpp</code> 文件内容如下</p><div class="language-cpp line-numbers-mode" data-highlighter="shiki" data-ext="cpp" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-cpp"><span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">#</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">include</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &lt;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">gtest/gtest.h</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&gt;</span></span>
71<span class="line"></span>
72<span class="line"><span style="--shiki-light:#999999;--shiki-dark:#666666;">#</span><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">include</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;"> &quot;</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;">add.hpp</span><span style="--shiki-light:#B5695977;--shiki-dark:#C98A7D77;">&quot;</span></span>
73<span class="line"></span>
74<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">TEST</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">AddTest</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Positive</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> EXPECT_EQ</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">add</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;">1</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 2</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">),</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 3</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
75<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">TEST</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">AddTest</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Negative</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> EXPECT_EQ</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">add</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;">-</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;">1</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> -</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;">2</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">),</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> -</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;">3</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
76<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">TEST</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">AddTest</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Zero</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> EXPECT_EQ</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">add</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;">0</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 0</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">),</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 0</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
77<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">TEST</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">AddTest</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> Mixed</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> EXPECT_EQ</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">add</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;">1</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> -</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;">2</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">),</span><span style="--shiki-light:#AB5959;--shiki-dark:#CB7676;"> -</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;">1</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span>
78<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">TEST</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">AddTest</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> FailedExample</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">)</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> {</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;"> EXPECT_EQ</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">add</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">(</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;">1</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">,</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 2</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">),</span><span style="--shiki-light:#2F798A;--shiki-dark:#4C9A91;"> 4</span><span style="--shiki-light:#999999;--shiki-dark:#666666;">);</span><span style="--shiki-light:#999999;--shiki-dark:#666666;"> }</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>然后,我们改写 <code>CMakeLists.txt</code> 文件,使其支持 GoogleTest 测试框架。改写后的 <code>CMakeLists.txt</code> 文件内容如下</p><div class="language-cmake line-numbers-mode" data-highlighter="shiki" data-ext="cmake" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-cmake"><span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">cmake_minimum_required</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(</span><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">VERSION</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> 3.16)</span></span>
79<span class="line"></span>
80<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">project</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(Add)</span></span>
81<span class="line"></span>
82<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">add_library</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(add STATIC add.cpp)</span></span>
83<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 先不要疑惑为什么 test_add.cpp 没有 main 函数也可以编译成可执行文件,后面会解释</span></span>
84<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">add_executable</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(test_add test_add.cpp)</span></span>
85<span class="line"></span>
86<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">find_package</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(GTest REQUIRED) </span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;">
86# 寻找 GTest 库</span></span>
87<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">include</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(GoogleTest)          </span><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 使用 GoogleTest 提供的 CMake 函数</span></span>
88<span class="line"></span>
89<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># GTest::gtest_main 提供了 main 函数,因此 test_add.cpp 不需要额外提供 main 函数</span></span>
90<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">target_link_libraries</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">(test_add</span></span>
91<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">  PRIVATE</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;"> add GTest::gtest_main</span></span>
92<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">)</span></span>
93<span class="line"></span>
94<span class="line"><span style="--shiki-light:#1E754F;--shiki-dark:#4D9375;">enable_testing</span><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">()</span></span>
95<span class="line"></span>
96<span class="line"><span style="--shiki-light:#A0ADA0;--shiki-dark:#758575DD;"># 自动添加 GoogleTest 测试用例</span></span>
97<span class="line"><span style="--shiki-light:#393A34;--shiki-dark:#DBD7CAEE;">gtest_discover_tests(test_add)</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="_3-2-运行测试" tabindex="-1"><a class="header-anchor" href="#_3-2-运行测试"><span>3.2 运行测试</span></a></h3><p>在项目根目录下执行以下命令,构建项目</p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-shell"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">mkdir</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> build</span></span>
98<span class="line"><span style="--shiki-light:#998418;--shiki-dark:#B8A965;">cd</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> build</span></span>
99<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">cmake</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> ..</span></span>
100<span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">cmake</span><span style="--shiki-light:#A65E2B;--shiki-dark:#C99076;"> --build</span><span style="--shiki-light:#B56959;--shiki-dark:#C98A7D;"> .</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>最后,我们可以使用以下命令运行测试</p><div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-shell"><span class="line"><span style="--shiki-light:#59873A;--shiki-dark:#80A665;">ctest</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p>运行结果如下</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" style="--shiki-light:#393a34;--shiki-dark:#dbd7caee;--shiki-light-bg:#ffffff;--shiki-dark-bg:#121212;"><pre class="shiki shiki-themes vitesse-light vitesse-dark vp-code"><code class="language-"><span class="line"><span>Test project /path/to/Add/build</span></span>
101<span class="line"><span>    Start 1: AddTest.Positive</span></span>
102<span class="line"><span>1/5 Test #1: AddTest.Positive .................   Passed    0.00 sec</span></span>
103<span class="line"><span>    Start 2: AddTest.Negative</span></span>
104<span class="line"><span>2/5 Test #2: AddTest.Negative .................   Passed    0.00 sec</span></span>
105<span class="line"><span>    Start 3: AddTest.Zero</span></span>
106<span class="line"><span>3/5 Test #3: AddTest.Zero .....................   Passed    0.00 sec</span></span>
107<span class="line"><span>    Start 4: AddTest.Mixed</span></span>
108<span class="line"><span>
1084/5 Test #4: AddTest.Mixed ....................   Passed    0.00 sec</span></span>
109<span class="line"><span>    Start 5: AddTest.FailedExample</span></span>
110<span class="line"><span>5/5 Test #5: AddTest.FailedExample ............***Failed    0.00 sec</span></span>
111<span class="line"><span></span></span>
112<span class="line"><span>80% tests passed, 1 tests failed out of 5</span></span>
113<span class="line"><span></span></span>
114<span class="line"><span>Total Test time (real) =   0.01 sec</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>`,31))])}const m=k(g,[["render",A]]),u=JSON.parse('{"path":"/tutorial/cmake/12.html","title":"【12】CTest 工具","lang":"zh-CN","frontmatter":{"title":"【12】CTest 工具","description":"教学视频 即将到来 ... 【12】CMake:CTest 工具 1. 前言 CMake 提供了一个名为 CTest 的工具,用于管理和运行测试用例。主要功能有 自动发现和运行测试 并行测试执行 测试结果收集和报告 提示 测试一般分为以下几种类型: 单元测试 —— 它是对软件中的最小可测试单元进行检查和验证的过程。单元测试通常是由开发人员编写的,用于验...","head":[["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"【12】CTest 工具\\",\\"image\\":[\\"\\"],\\"dateModified\\":\\"2024-12-28T11:42:56.000Z\\",\\"author\\":[]}"],["meta",{"property":"og:url","content":"https://www.cccolt.top/tutorial/cmake/12.html"}],["meta",{"property":"og:site_name","content":"Cccolt 个人主页"}],["meta",{"property":"og:title","content":"【12】CTest 工具"}],["meta",{"property":"og:description","content":"教学视频 即将到来 ... 【12】CMake:CTest 工具 1. 前言 CMake 提供了一个名为 CTest 的工具,用于管理和运行测试用例。主要功能有 自动发现和运行测试 并行测试执行 测试结果收集和报告 提示 测试一般分为以下几种类型: 单元测试 —— 它是对软件中的最小可测试单元进行检查和验证的过程。单元测试通常是由开发人员编写的,用于验..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-12-28T11:42:56.000Z"}],["meta",{"property":"article:modified_time","content":"2024-12-28T11:42:56.000Z"}]]},"readingTime":{"minutes":4.71,"words":1413},"git":{"createdTime":1713775023000,"updatedTime":1735386176000,"contributors":[{"name":"zhaoxi","username":"zhaoxi","email":"[email protected]","commits":4,"avatar":"https://avatars.githubusercontent.com/zhaoxi?v=4","url":"https://github.com/zhaoxi"}]},"autoDesc":true,"filePathRelative":"tutorial/cmake/12.md","headers":[]}');export{m as comp,u as data};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.