[{"data":1,"prerenderedAt":213},["ShallowReactive",2],{"\u002Fcn\u002Fopen_source\u002Fcontribution\u002Fwriting_tests":3,"surround-\u002Fcn\u002Fopen_source\u002Fcontribution\u002Fwriting_tests":197},{"id":4,"title":5,"avatar":6,"banner":6,"body":7,"category":6,"desc":190,"description":53,"extension":191,"links":6,"meta":192,"navigation":6,"path":193,"seo":194,"stem":195,"__hash__":196},"docs\u002Fcn\u002Fopen_source\u002Fcontribution\u002Fwriting_tests.md","如何编写单元测试",null,{"type":8,"value":9,"toc":182},"minimark",[10,14,43,47,109,112,115,132,138,141,144,149,156,160,171,178],[11,12,13],"h2",{"id":13},"编写测试",[15,16,17,30,36],"ol",{},[18,19,20,21,25,26,29],"li",{},"在 ",[22,23,24],"code",{},"tests\u002F"," 目录下创建一个新的 Python 文件，文件名应以 ",[22,27,28],{},"test_"," 开头。",[18,31,32,33,35],{},"在该文件中定义以 ",[22,34,28],{}," 开头的函数。",[18,37,38,39,42],{},"使用 ",[22,40,41],{},"assert"," 语句检查预期结果。",[44,45,46],"p",{},"以下是一个基本示例：",[48,49,54],"pre",{"className":50,"code":51,"language":52,"meta":53,"style":53},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# tests\u002Ftest_example.py\n\ndef test_addition():\n    assert 1 + 1 == 2\n","python","",[22,55,56,65,72,87],{"__ignoreMap":53},[57,58,61],"span",{"class":59,"line":60},"line",1,[57,62,64],{"class":63},"sHwdD","# tests\u002Ftest_example.py\n",[57,66,68],{"class":59,"line":67},2,[57,69,71],{"emptyLinePlaceholder":70},true,"\n",[57,73,75,79,83],{"class":59,"line":74},3,[57,76,78],{"class":77},"spNyl","def",[57,80,82],{"class":81},"s2Zo4"," test_addition",[57,84,86],{"class":85},"sMK4o","():\n",[57,88,90,94,98,101,103,106],{"class":59,"line":89},4,[57,91,93],{"class":92},"s7zQu","    assert",[57,95,97],{"class":96},"sbssI"," 1",[57,99,100],{"class":85}," +",[57,102,97],{"class":96},[57,104,105],{"class":85}," ==",[57,107,108],{"class":96}," 2\n",[11,110,111],{"id":111},"运行测试",[44,113,114],{},"要运行所有测试，请在项目根目录下执行以下命令：",[48,116,120],{"className":117,"code":118,"language":119,"meta":53,"style":53},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","make test\n","bash",[22,121,122],{"__ignoreMap":53},[57,123,124,128],{"class":59,"line":60},[57,125,127],{"class":126},"sBMFI","make",[57,129,131],{"class":130},"sfazB"," test\n",[44,133,134,135,137],{},"该命令将自动发现并运行 ",[22,136,24],{}," 目录下的所有测试用例。",[11,139,140],{"id":140},"高级技巧",[44,142,143],{},"Pytest 提供了许多高级功能，例如 fixtures 和 mocking。",[145,146,148],"h3",{"id":147},"fixtures","Fixtures",[44,150,151,152,155],{},"Fixtures 是可以为测试提供数据或设置初始状态的函数。使用 ",[22,153,154],{},"@pytest.fixture"," 装饰器进行定义。",[145,157,159],{"id":158},"mocking","Mocking",[44,161,162,163,166,167,170],{},"Mocking 用于用 mock 对象替换系统中的某些部分。这对于隔离被测试的代码非常有用。常用的工具是 ",[22,164,165],{},"unittest.mock"," 库，通常配合 ",[22,168,169],{},"patch"," 函数使用。",[44,172,173,174,177],{},"有关 mocking 的示例，请参见 ",[22,175,176],{},"tests\u002Ftest_hello_world.py","。",[179,180,181],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":53,"searchDepth":67,"depth":67,"links":183},[184,185,186],{"id":13,"depth":67,"text":13},{"id":111,"depth":67,"text":111},{"id":140,"depth":67,"text":140,"children":187},[188,189],{"id":147,"depth":74,"text":148},{"id":158,"depth":74,"text":159},"本项目使用 [pytest](https:\u002F\u002Fdocs.pytest.org\u002F) 进行单元测试。","md",{},"\u002Fcn\u002Fopen_source\u002Fcontribution\u002Fwriting_tests",{"title":5,"description":53},"cn\u002Fopen_source\u002Fcontribution\u002Fwriting_tests","8WusWatEXjSYfTEqA1azp5pY7-jL5EFIJ5SDx5PuMzc",[198,206],{"title":199,"path":200,"stem":201,"icon":202,"framework":6,"module":6,"class":203,"target":-1,"active":204,"defaultOpen":204,"children":-1,"description":205},"文档编写指南","\u002Fcn\u002Fopen_source\u002Fcontribution\u002Fwriting_docs","open_source\u002Fcontribution\u002Fwriting_docs","i-ri-article-line",[],false,"本项目使用 Nuxt Content 构建支持 Markdown 和富 Vue 组件的文档系统。",{"title":207,"path":208,"stem":209,"icon":210,"framework":6,"module":6,"class":211,"target":212,"active":204,"defaultOpen":70,"children":-1,"description":-1},"API 参考文档","\u002Fcn\u002Fapi-reference\u002Fsearch-memories","api-reference\u002Fsearch-memories","i-ri-file-code-line",[],"_blank",1774339754350]