}sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextEnglish}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/dev-tools/testing-overviewmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/zh_TW/dev-tools/testing-overviewmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/it_IT/dev-tools/testing-overviewmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/ja_JP/dev-tools/testing-overviewmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/ko_KR/dev-tools/testing-overviewmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/pt_BR/dev-tools/testing-overviewmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget./translations/sp_SP/dev-tools/testing-overviewmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageChinese (Simplified)uh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh[/var/lib/git/docbuild/linux/Documentation/translations/zh_CN/dev-tools/testing-overview.rsthKubhnote)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]h paragraph)}(hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。h]hX{此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 如果您发现本文档与原始文件有任何不同或者有翻译问题,请发建议或者补丁给 该文件的译者,或者请求中文文档维护者和审阅者的帮助。}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hh5Documentation/translations/zh_CN/disclaimer-zh_CN.rsthKhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhNubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hOriginalh]hOriginal}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h,Documentation/dev-tools/testing-overview.rsth]h)}(hjh]h,Documentation/dev-tools/testing-overview.rst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h Translatorh]h Translator}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhKubj)}(h2胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn> h]h)}(h1胡皓文 Hu Haowen <2023002089@link.tyut.edu.cn>h](h胡皓文 Hu Haowen <}(hj3hhhNhNubh reference)}(h2023002089@link.tyut.edu.cnh]h2023002089@link.tyut.edu.cn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]refuri"mailto:2023002089@link.tyut.edu.cnuh1j;hj3ubh>}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj/ubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhKubhsection)}(hhh](htitle)}(h内核测试指南h]h内核测试指南}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjkhhhhhK ubh)}(h有许多不同的工具可以用于测试Linux内核,因此了解什么时候使用它们可能 很困难。本文档粗略概述了它们之间的区别,并阐释了它们是怎样糅合在一起 的。h]h有许多不同的工具可以用于测试Linux内核,因此了解什么时候使用它们可能 很困难。本文档粗略概述了它们之间的区别,并阐释了它们是怎样糅合在一起 的。}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjkhhubjj)}(hhh](jo)}(h编写和运行测试h]h编写和运行测试}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjhhhhhKubh)}(h大多数内核测试都是用kselftest或KUnit框架之一编写的。它们都让运行测试 更加简化,并为编写新测试提供帮助。h]h大多数内核测试都是用kselftest或KUnit框架之一编写的。它们都让运行测试 更加简化,并为编写新测试提供帮助。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hr如果你想验证内核的行为——尤其是内核的特定部分——那你就要使用kUnit或 kselftest。h]hr如果你想验证内核的行为——尤其是内核的特定部分——那你就要使用kUnit或 kselftest。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjj)}(hhh](jo)}(hKUnit和kselftest的区别h]hKUnit和kselftest的区别}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jnhjhhhhhKubh)}(hX.由于本文段中部分术语尚无较好的对应中文释义,可能导致与原文含义 存在些许差异,因此建议读者结合原文 (Documentation/dev-tools/testing-overview.rst)辅助阅读。 如对部分翻译有异议或有更好的翻译意见,欢迎联系译者进行修订。h]h)}(hX.由于本文段中部分术语尚无较好的对应中文释义,可能导致与原文含义 存在些许差异,因此建议读者结合原文 (Documentation/dev-tools/testing-overview.rst)辅助阅读。 如对部分翻译有异议或有更好的翻译意见,欢迎联系译者进行修订。h]hX.由于本文段中部分术语尚无较好的对应中文释义,可能导致与原文含义 存在些许差异,因此建议读者结合原文 (Documentation/dev-tools/testing-overview.rst)辅助阅读。 如对部分翻译有异议或有更好的翻译意见,欢迎联系译者进行修订。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1hhjhhhhhNubh)}(hKUnit(Documentation/dev-tools/kunit/index.rst)是用于“白箱”测 试的一个完整的内核内部系统:因为测试代码是内核的一部分,所以它能够访 问用户空间不能访问到的内部结构和功能。h]hKUnit(Documentation/dev-tools/kunit/index.rst)是用于“白箱”测 试的一个完整的内核内部系统:因为测试代码是内核的一部分,所以它能够访 问用户空间不能访问到的内部结构和功能。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK"hjhhubh)}(h因此,KUnit测试最好针对内核中较小的、自包含的部分,以便能够独立地测 试。“单元”测试的概念亦是如此。h]h因此,KUnit测试最好针对内核中较小的、自包含的部分,以便能够独立地测 试。“单元”测试的概念亦是如此。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjhhubh)}(h比如,一个KUnit测试可能测试一个单独的内核功能(甚至通过一个函数测试 一个单一的代码路径,例如一个错误处理案例),而不是整个地测试一个特性。h]h比如,一个KUnit测试可能测试一个单独的内核功能(甚至通过一个函数测试 一个单一的代码路径,例如一个错误处理案例),而不是整个地测试一个特性。}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjhhubh)}(hu这也使得KUnit测试构建和运行非常地快,从而能够作为开发流程的一部分被 频繁地运行。h]hu这也使得KUnit测试构建和运行非常地快,从而能够作为开发流程的一部分被 频繁地运行。}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK,hjhhubh)}(hi有关更详细的介绍,请参阅KUnit测试代码风格指南 Documentation/dev-tools/kunit/style.rsth]hi有关更详细的介绍,请参阅KUnit测试代码风格指南 Documentation/dev-tools/kunit/style.rst}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjhhubh)}(hkselftest(Documentation/dev-tools/kselftest.rst),相对来说,大量用 于用户空间,并且通常测试用户空间的脚本或程序。h]hkselftest(Documentation/dev-tools/kselftest.rst),相对来说,大量用 于用户空间,并且通常测试用户空间的脚本或程序。}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjhhubh)}(hX)这使得编写复杂的测试,或者需要操作更多全局系统状态的测试更加容易(诸 如生成进程之类)。然而,从kselftest直接调用内核函数是不行的。这也就 意味着只有通过某种方式(如系统调用、驱动设备、文件系统等)导出到了用 户空间的内核功能才能使用kselftest来测试。为此,有些测试包含了一个伴 生的内核模块用于导出更多的信息和功能。不过,对于基本上或者完全在内核 中运行的测试,KUnit可能是更佳工具。h]hX)这使得编写复杂的测试,或者需要操作更多全局系统状态的测试更加容易(诸 如生成进程之类)。然而,从kselftest直接调用内核函数是不行的。这也就 意味着只有通过某种方式(如系统调用、驱动设备、文件系统等)导出到了用 户空间的内核功能才能使用kselftest来测试。为此,有些测试包含了一个伴 生的内核模块用于导出更多的信息和功能。不过,对于基本上或者完全在内核 中运行的测试,KUnit可能是更佳工具。}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjhhubh)}(hkselftest也因此非常适合于全部功能的测试,因为这些功能会将接口暴露到 用户空间,从而能够被测试,而不是展现实现细节。“system”测试和 “end-to-end”测试亦是如此。h]hkselftest也因此非常适合于全部功能的测试,因为这些功能会将接口暴露到 用户空间,从而能够被测试,而不是展现实现细节。“system”测试和 “end-to-end”测试亦是如此。}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK