uTools-Manuals/docs/python/development.html
2019-04-08 23:22:26 +08:00

1 line
22 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="body" role="main"><div class="section" id="development-tools"><h1><span class="yiyi-st" id="yiyi-9">26. </span><span class="yiyi-st" id="yiyi-10">开发工具</span></h1><p><span class="yiyi-st" id="yiyi-11">本章中描述的模块有助于编写软件。</span><span class="yiyi-st" id="yiyi-12">例如,<a class="reference internal" href="pydoc.html#module-pydoc" title="pydoc: Documentation generator and online help system."><code class="xref py py-mod docutils literal"><span class="pre">pydoc</span></code></a>模块接受一个模块并根据模块的内容生成文档。</span><span class="yiyi-st" id="yiyi-13"><a class="reference internal" href="doctest.html#module-doctest" title="doctest: Test pieces of code within docstrings."><code class="xref py py-mod docutils literal"><span class="pre">doctest</span></code></a><a class="reference internal" href="unittest.html#module-unittest" title="unittest: Unit testing framework for Python."><code class="xref py py-mod docutils literal"><span class="pre">unittest</span></code></a>模块包含用于编写单元测试的框架,可自动执行代码并验证预期输出是否生成。</span><span class="yiyi-st" id="yiyi-14"><strong class="program">2to3</strong>可以将Python 2.x源代码翻译成有效的Python 3.x代码。</span></p><p><span class="yiyi-st" id="yiyi-15">本章中描述的模块列表是:</span></p><div class="toctree-wrapper compound"><ul><li class="toctree-l1"><span class="yiyi-st" id="yiyi-23"><a class="reference internal" href="typing.html">26.1. <code class="docutils literal"><span class="pre">typing</span></code> - 支持类型提示</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-16"><a class="reference internal" href="typing.html#type-aliases">26.1.1.类型别名</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-17"><a class="reference internal" href="typing.html#newtype">26.1.2. NewType</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-18"><a class="reference internal" href="typing.html#callable">26.1.3.可调用</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-19"><a class="reference internal" href="typing.html#generics">26.1.4.泛型</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-20"><a class="reference internal" href="typing.html#user-defined-generic-types">26.1.5.用户定义的泛型类型</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-21"><a class="reference internal" href="typing.html#the-any-type">26.1.6. <code class="docutils literal"><span class="pre">Any</span></code>类型</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-22"><a class="reference internal" href="typing.html#classes-functions-and-decorators">26.1.7.类,函数和装饰器</a></span></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-24"><a class="reference internal" href="pydoc.html">26.2. <code class="docutils literal"><span class="pre">pydoc</span></code> - 文档生成器和在线帮助系统</a></span></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-46"><a class="reference internal" href="doctest.html">26.3. <code class="docutils literal"><span class="pre">doctest</span></code> - 测试互动Python示例</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-25"><a class="reference internal" href="doctest.html#simple-usage-checking-examples-in-docstrings">26.3.1.简单用法检查Docstrings中的示例</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-26"><a class="reference internal" href="doctest.html#simple-usage-checking-examples-in-a-text-file">26.3.2.简单用法:检查文本文件中的示例</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-34"><a class="reference internal" href="doctest.html#how-it-works">26.3.3.工作原理</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-27"><a class="reference internal" href="doctest.html#which-docstrings-are-examined">26.3.3.1.哪些文档字符串被检查?</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-28"><a class="reference internal" href="doctest.html#how-are-docstring-examples-recognized">26.3.3.2.如何识别Docstring示例</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-29"><a class="reference internal" href="doctest.html#what-s-the-execution-context">26.3.3.3.什么是执行上下文?</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-30"><a class="reference internal" href="doctest.html#what-about-exceptions">26.3.3.4.关于异常?</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-31"><a class="reference internal" href="doctest.html#option-flags">26.3.3.5.选项标志</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-32"><a class="reference internal" href="doctest.html#directives">26.3.3.6.指令</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-33"><a class="reference internal" href="doctest.html#warnings">26.3.3.7.警告</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-35"><a class="reference internal" href="doctest.html#basic-api">26.3.4.基本API</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-36"><a class="reference internal" href="doctest.html#unittest-api"> 26.3.5. Unittest API</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-43"><a class="reference internal" href="doctest.html#advanced-api">26.3.6.高级API</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-37"><a class="reference internal" href="doctest.html#doctest-objects">26.3.6.1. DocTest对象</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-38"><a class="reference internal" href="doctest.html#example-objects">26.3.6.2.示例对象</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-39"><a class="reference internal" href="doctest.html#doctestfinder-objects">26.3.6.3. DocTestFinder对象</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-40"><a class="reference internal" href="doctest.html#doctestparser-objects">26.3.6.4. DocTestParser对象</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-41"><a class="reference internal" href="doctest.html#doctestrunner-objects">26.3.6.5. DocTestRunner对象</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-42"><a class="reference internal" href="doctest.html#outputchecker-objects">26.3.6.6. OutputChecker对象</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-44"><a class="reference internal" href="doctest.html#debugging">26.3.7.调试</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-45"><a class="reference internal" href="doctest.html#soapbox">26.3.8. Soapbox</a></span></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-65"><a class="reference internal" href="unittest.html">26.4. <code class="docutils literal"><span class="pre">unittest</span></code> - 单元测试框架</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-47"><a class="reference internal" href="unittest.html#basic-example">26.4.1.基本示例</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-49"><a class="reference internal" href="unittest.html#command-line-interface">26.4.2.命令行接口</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-48"><a class="reference internal" href="unittest.html#command-line-options">26.4.2.1.命令行选项</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-50"><a class="reference internal" href="unittest.html#test-discovery">26.4.3.测试发现</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-51"><a class="reference internal" href="unittest.html#organizing-test-code">26.4.4.整理测试代码</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-52"><a class="reference internal" href="unittest.html#re-using-old-test-code">26.4.5.重新使用旧测试代码</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-53"><a class="reference internal" href="unittest.html#skipping-tests-and-expected-failures">26.4.6.跳过测试和预期失败</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-54"><a class="reference internal" href="unittest.html#distinguishing-test-iterations-using-subtests">26.4.7.使用分测验</a>区分测试迭代</span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-60"><a class="reference internal" href="unittest.html#classes-and-functions">26.4.8.类和函数</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-56"><a class="reference internal" href="unittest.html#test-cases">26.4.8.1.测试用例</a></span><ul><li class="toctree-l4"><span class="yiyi-st" id="yiyi-55"><a class="reference internal" href="unittest.html#deprecated-aliases">26.4.8.1.1.已弃用别名</a></span></li></ul></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-57"><a class="reference internal" href="unittest.html#grouping-tests">26.4.8.2.分组测试</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-59"><a class="reference internal" href="unittest.html#loading-and-running-tests">26.4.8.3.正在载入并运行测试</a></span><ul><li class="toctree-l4"><span class="yiyi-st" id="yiyi-58"><a class="reference internal" href="unittest.html#load-tests-protocol">26.4.8.3.1. load_tests协议</a></span></li></ul></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-63"><a class="reference internal" href="unittest.html#class-and-module-fixtures">26.4.9.类和模块夹具</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-61"><a class="reference internal" href="unittest.html#setupclass-and-teardownclass">26.4.9.1. setUpClass和tearDownClass</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-62"><a class="reference internal" href="unittest.html#setupmodule-and-teardownmodule">26.4.9.2. setUpModule和tearDownModule</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-64"><a class="reference internal" href="unittest.html#signal-handling">26.4.10.信号处理</a></span></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-95"><a class="reference internal" href="unittest.mock.html">26.5. <code class="docutils literal"><span class="pre">unittest.mock</span></code> - mock object库</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-66"><a class="reference internal" href="unittest.mock.html#quick-guide">26.5.1.快速指南</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-71"><a class="reference internal" href="unittest.mock.html#the-mock-class">26.5.2.模拟类</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-67"><a class="reference internal" href="unittest.mock.html#calling">26.5.2.1.调用</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-68"><a class="reference internal" href="unittest.mock.html#deleting-attributes">26.5.2.2.删除属性</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-69"><a class="reference internal" href="unittest.mock.html#mock-names-and-the-name-attribute">26.5.2.3.模拟名称和名称属性</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-70"><a class="reference internal" href="unittest.mock.html#attaching-mocks-as-attributes">26.5.2.4.将模拟作为属性附加</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-82"><a class="reference internal" href="unittest.mock.html#the-patchers">26.5.3.修补器</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-72"><a class="reference internal" href="unittest.mock.html#patch">26.5.3.1.补丁</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-73"><a class="reference internal" href="unittest.mock.html#patch-object">26.5.3.2. patch.object</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-74"><a class="reference internal" href="unittest.mock.html#patch-dict">26.5.3.3. patch.dict</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-75"><a class="reference internal" href="unittest.mock.html#patch-multiple">26.5.3.4. patch.multiple</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-76"><a class="reference internal" href="unittest.mock.html#patch-methods-start-and-stop">26.5.3.5.补丁方法:开始和停止</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-77"><a class="reference internal" href="unittest.mock.html#patch-builtins">26.5.3.6.补丁内置</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-78"><a class="reference internal" href="unittest.mock.html#test-prefix">26.5.3.7. TEST_PREFIX</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-79"><a class="reference internal" href="unittest.mock.html#nesting-patch-decorators">26.5.3.8.嵌套修饰符</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-80"><a class="reference internal" href="unittest.mock.html#where-to-patch">26.5.3.9.在哪里打补丁</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-81"><a class="reference internal" href="unittest.mock.html#patching-descriptors-and-proxy-objects">26.5.3.10.修补描述器和代理对象</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-85"><a class="reference internal" href="unittest.mock.html#magicmock-and-magic-method-support">26.5.4. MagicMock和魔法方法支持</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-83"><a class="reference internal" href="unittest.mock.html#mocking-magic-methods">26.5.4.1.嘲笑魔法方法</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-84"><a class="reference internal" href="unittest.mock.html#magic-mock">26.5.4.2.魔术模拟</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-94"><a class="reference internal" href="unittest.mock.html#helpers">26.5.5.助手</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-86"><a class="reference internal" href="unittest.mock.html#sentinel">26.5.5.1.哨兵</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-87"><a class="reference internal" href="unittest.mock.html#default">26.5.5.2. DEFAULT</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-88"><a class="reference internal" href="unittest.mock.html#call">26.5.5.3.调用</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-89"><a class="reference internal" href="unittest.mock.html#create-autospec">26.5.5.4. create_autospec</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-90"><a class="reference internal" href="unittest.mock.html#any">26.5.5.5. ANY</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-91"><a class="reference internal" href="unittest.mock.html#filter-dir">26.5.5.6. FILTER_DIR</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-92"><a class="reference internal" href="unittest.mock.html#mock-open">26.5.5.7. mock_open</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-93"><a class="reference internal" href="unittest.mock.html#autospeccing">26.5.5.8.自动指定</a></span></li></ul></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-121"><a class="reference internal" href="unittest.mock-examples.html">26.6. <code class="docutils literal"><span class="pre">unittest.mock</span></code> - 开始使用</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-105"><a class="reference internal" href="unittest.mock-examples.html#using-mock">26.6.1.使用Mock</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-96"><a class="reference internal" href="unittest.mock-examples.html#mock-patching-methods">26.6.1.1.模拟修补方法</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-97"><a class="reference internal" href="unittest.mock-examples.html#mock-for-method-calls-on-an-object">26.6.1.2.对对象的方法调用的模拟</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-98"><a class="reference internal" href="unittest.mock-examples.html#mocking-classes">26.6.1.3.模拟类</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-99"><a class="reference internal" href="unittest.mock-examples.html#naming-your-mocks">26.6.1.4.命名你的mocks</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-100"><a class="reference internal" href="unittest.mock-examples.html#tracking-all-calls">26.6.1.5.跟踪所有来电</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-101"><a class="reference internal" href="unittest.mock-examples.html#setting-return-values-and-attributes">26.6.1.6.设置返回值和属性</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-102"><a class="reference internal" href="unittest.mock-examples.html#raising-exceptions-with-mocks">26.6.1.7.使用mock提出例外</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-103"><a class="reference internal" href="unittest.mock-examples.html#side-effect-functions-and-iterables">26.6.1.8.副作用函数和迭代函数</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-104"><a class="reference internal" href="unittest.mock-examples.html#creating-a-mock-from-an-existing-object">26.6.1.9.从现有对象创建模拟</a></span></li></ul></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-106"><a class="reference internal" href="unittest.mock-examples.html#patch-decorators">26.6.2.修补程序</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-120"><a class="reference internal" href="unittest.mock-examples.html#further-examples">26.6.3.其他示例</a></span><ul><li class="toctree-l3"><span class="yiyi-st" id="yiyi-107"><a class="reference internal" href="unittest.mock-examples.html#mocking-chained-calls">26.6.3.1.模拟链接呼叫</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-108"><a class="reference internal" href="unittest.mock-examples.html#partial-mocking">26.6.3.2.部分模拟</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-109"><a class="reference internal" href="unittest.mock-examples.html#mocking-a-generator-method">26.6.3.3. Mocking a生成器Method</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-110"><a class="reference internal" href="unittest.mock-examples.html#applying-the-same-patch-to-every-test-method">26.6.3.4.对每个测试方法应用相同的补丁</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-111"><a class="reference internal" href="unittest.mock-examples.html#mocking-unbound-methods">26.6.3.5.模拟未绑定方法</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-112"><a class="reference internal" href="unittest.mock-examples.html#checking-multiple-calls-with-mock">26.6.3.6.使用模拟检查多个通话</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-113"><a class="reference internal" href="unittest.mock-examples.html#coping-with-mutable-arguments">26.6.3.7.处理可变参数</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-114"><a class="reference internal" href="unittest.mock-examples.html#nesting-patches">26.6.3.8.嵌套修补程序</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-115"><a class="reference internal" href="unittest.mock-examples.html#mocking-a-dictionary-with-magicmock">26.6.3.9.使用MagicMock嘲笑字典</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-116"><a class="reference internal" href="unittest.mock-examples.html#mock-subclasses-and-their-attributes">26.6.3.10. Mock子类及其属性</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-117"><a class="reference internal" href="unittest.mock-examples.html#mocking-imports-with-patch-dict">26.6.3.11. Mocking导入与patch.dict</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-118"><a class="reference internal" href="unittest.mock-examples.html#tracking-order-of-calls-and-less-verbose-call-assertions">26.6.3.12.跟踪呼叫顺序和较少详细的调用断言</a></span></li><li class="toctree-l3"><span class="yiyi-st" id="yiyi-119"><a class="reference internal" href="unittest.mock-examples.html#more-complex-argument-matching">26.6.3.13.更复杂的参数匹配</a></span></li></ul></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-125"><a class="reference internal" href="2to3.html">26.7. 2to3 - 自动Python 2到3代码翻译</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-122"><a class="reference internal" href="2to3.html#using-2to3">26.7.1.使用2to3</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-123"><a class="reference internal" href="2to3.html#fixers">26.7.2. Fixers</a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-124"><a class="reference internal" href="2to3.html#module-lib2to3">26.7.3. <code class="docutils literal"><span class="pre">lib2to3</span></code> - 2to3的库</a></span></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-128"><a class="reference internal" href="test.html">26.8. <code class="docutils literal"><span class="pre">test</span></code> - Python回归测试软件包</a></span><ul><li class="toctree-l2"><span class="yiyi-st" id="yiyi-126"><a class="reference internal" href="test.html#writing-unit-tests-for-the-test-package">26.8.1.写入单元测试<code class="docutils literal"><span class="pre">test</span></code></a></span></li><li class="toctree-l2"><span class="yiyi-st" id="yiyi-127"><a class="reference internal" href="test.html#running-tests-using-the-command-line-interface">26.8.2.使用命令行界面运行测试</a></span></li></ul></li><li class="toctree-l1"><span class="yiyi-st" id="yiyi-129"><a class="reference internal" href="test.html#module-test.support">26.9. <code class="docutils literal"><span class="pre">test.support</span></code> - Python测试套件的实用工具</a></span></li></ul></div></div></div>