<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>doctest</title>
	<atom:link href="https://techgrowup.net/tag/doctest/feed/" rel="self" type="application/rss+xml" />
	<link>https://techgrowup.net</link>
	<description>エンジニアを強くする</description>
	<lastBuildDate>Sat, 11 Jan 2025 15:00:58 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://techgrowup.net/wp-content/uploads/2021/05/hp-icon-150x150.png</url>
	<title>doctest</title>
	<link>https://techgrowup.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Python開発入門69 doctest入門！Pythonコード内で簡単にテストを実装する方法</title>
		<link>https://techgrowup.net/python-doctest/</link>
					<comments>https://techgrowup.net/python-doctest/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[techgrowup]]></dc:creator>
		<pubDate>Sat, 11 Jan 2025 15:00:57 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[doctest]]></category>
		<category><![CDATA[python]]></category>
		<guid isPermaLink="false">https://techgrowup.net/?p=2320</guid>

					<description><![CDATA[はじめに ソフトウェア開発では、コードの動作確認を行うテストが重要です。しかし、テストケースを別途記述するのは手間がかかる場合があります。 doctestモジュールは、Pythonコード内に記述されたドキュメント（doc [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading"><strong>はじめに</strong></h1>



<p>ソフトウェア開発では、コードの動作確認を行うテストが重要です。しかし、テストケースを別途記述するのは手間がかかる場合があります。</p>



<p><strong>doctest</strong>モジュールは、Pythonコード内に記述されたドキュメント（docstring）をそのままテストケースとして活用することで、この課題を解決します。簡単なサンプルコード付きのドキュメントを作成するだけで、コードの動作確認が可能になります。</p>



<h2 class="wp-block-heading"><strong>doctestとは</strong></h2>



<h3 class="wp-block-heading"><strong>doctestの概要</strong></h3>



<p><strong>doctest</strong>は、Python標準ライブラリに含まれるモジュールで、docstringに記述されたサンプルコードを自動的に実行し、その出力が期待される結果と一致するかを確認します。</p>



<h3 class="wp-block-heading"><strong>doctestの主なメリット</strong></h3>



<ol class="wp-block-list">
<li><strong>簡単なテスト作成</strong><br>サンプルコードをdocstringに記述するだけで、テストが自動的に作成されます。</li>



<li><strong>ドキュメントの一貫性向上</strong><br>実行可能なサンプルコードを記載することで、ドキュメントと実際のコードの整合性を保てます。</li>



<li><strong>手軽な導入</strong><br>Python標準ライブラリのため、追加のインストールが不要です。</li>
</ol>



<h2 class="wp-block-heading"><strong>doctestの基本的な使い方</strong></h2>



<h3 class="wp-block-heading"><strong>サンプルコードをdocstringに記述</strong></h3>



<p>以下のように、関数やクラスのdocstring内にサンプルコードを記述します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="def add(a, b):
    &quot;&quot;&quot;
    二つの数値を加算します。

    &gt;&gt;&gt; add(1, 2)
    3
    &gt;&gt;&gt; add(-1, 1)
    0
    &quot;&quot;&quot;
    return a + b" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">add</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">a</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">b</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #CE9178">&quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #CE9178">    二つの数値を加算します。</span></span>
<span class="line"></span>
<span class="line"><span style="color: #CE9178">    </span><span style="color: #C586C0">&gt;&gt;&gt; </span><span style="color: #CE9178">add(1, 2)</span></span>
<span class="line"><span style="color: #CE9178">    3</span></span>
<span class="line"><span style="color: #CE9178">    </span><span style="color: #C586C0">&gt;&gt;&gt; </span><span style="color: #CE9178">add(-1, 1)</span></span>
<span class="line"><span style="color: #CE9178">    0</span></span>
<span class="line"><span style="color: #CE9178">    &quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> a + b</span></span></code></pre></div>



<h3 class="wp-block-heading"><strong>doctestを実行</strong></h3>



<p><code>doctest</code>を使用してテストを実行するには、以下の2つの方法があります。</p>



<h6 class="wp-block-heading"><strong>方法1：スクリプト内で直接実行</strong></h6>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="if __name__ == &quot;__main__&quot;:
    import doctest
    doctest.testmod()" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">__name__</span><span style="color: #D4D4D4"> == </span><span style="color: #CE9178">&quot;__main__&quot;</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">import</span><span style="color: #D4D4D4"> doctest</span></span>
<span class="line"><span style="color: #D4D4D4">    doctest.testmod()</span></span></code></pre></div>



<h6 class="wp-block-heading"><strong>方法2：コマンドラインで実行</strong></h6>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="python -m doctest -v example.py" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">python</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-m</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">doctest</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">example.py</span></span></code></pre></div>



<h3 class="wp-block-heading"><strong>実行結果</strong></h3>



<p>成功した場合は以下のような結果が表示されます：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="1 items passed all tests:
   2 tests in example.add
2 tests in 1 items.
2 passed and 0 failed.
Test passed." style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">1</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">items</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">passed</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">all</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">tests:</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #DCDCAA">2</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">tests</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">in</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">example.add</span></span>
<span class="line"><span style="color: #DCDCAA">2</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">tests</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">in</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">items.</span></span>
<span class="line"><span style="color: #DCDCAA">2</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">passed</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">and</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">failed.</span></span>
<span class="line"><span style="color: #DCDCAA">Test</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">passed.</span></span></code></pre></div>



<p>失敗した場合は、期待値と実際の出力が表示されます。</p>



<h2 class="wp-block-heading"><strong>doctestの応用</strong></h2>



<h3 class="wp-block-heading"><strong>複数行の出力をテスト</strong></h3>



<p>doctestは複数行にわたる出力にも対応しています。</p>



<h6 class="wp-block-heading"><strong>例：複数行の出力</strong></h6>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="def greet(name):
    &quot;&quot;&quot;
    指定した名前で挨拶をします。

    &gt;&gt;&gt; greet(&quot;Alice&quot;)
    Hello, Alice!
    How are you today?
    &quot;&quot;&quot;
    return f&quot;Hello, {name}!\nHow are you today?&quot;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">greet</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">name</span><span style="color: #D4D4D4">):</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #CE9178">&quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #CE9178">    指定した名前で挨拶をします。</span></span>
<span class="line"></span>
<span class="line"><span style="color: #CE9178">    </span><span style="color: #C586C0">&gt;&gt;&gt; </span><span style="color: #CE9178">greet(&quot;Alice&quot;)</span></span>
<span class="line"><span style="color: #CE9178">    Hello, Alice!</span></span>
<span class="line"><span style="color: #CE9178">    How are you today?</span></span>
<span class="line"><span style="color: #CE9178">    &quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">f</span><span style="color: #CE9178">&quot;Hello, </span><span style="color: #569CD6">{</span><span style="color: #D4D4D4">name</span><span style="color: #569CD6">}</span><span style="color: #CE9178">!</span><span style="color: #D7BA7D">\n</span><span style="color: #CE9178">How are you today?&quot;</span></span></code></pre></div>



<h3 class="wp-block-heading"><strong>任意のテキストを無視する</strong></h3>



<p>特定の部分を無視する場合、<code>...</code>を使用します。</p>



<h6 class="wp-block-heading"><strong>例：一部を無視する</strong></h6>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="def example():
    &quot;&quot;&quot;
    テキストの一部を無視します。

    &gt;&gt;&gt; example()
    Result:
    ...
    &quot;&quot;&quot;
    return &quot;Result:\nLine1\nLine2&quot;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">def</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">example</span><span style="color: #D4D4D4">():</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #CE9178">&quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #CE9178">    テキストの一部を無視します。</span></span>
<span class="line"></span>
<span class="line"><span style="color: #CE9178">    </span><span style="color: #C586C0">&gt;&gt;&gt; </span><span style="color: #CE9178">example()</span></span>
<span class="line"><span style="color: #CE9178">    Result:</span></span>
<span class="line"><span style="color: #CE9178">    ...</span></span>
<span class="line"><span style="color: #CE9178">    &quot;&quot;&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;Result:</span><span style="color: #D7BA7D">\n</span><span style="color: #CE9178">Line1</span><span style="color: #D7BA7D">\n</span><span style="color: #CE9178">Line2&quot;</span></span></code></pre></div>



<h3 class="wp-block-heading"><strong>外部モジュールのテスト</strong></h3>



<p><code>doctest</code>は外部モジュール内のdocstringもテストできます。</p>



<h6 class="wp-block-heading"><strong>例：外部モジュールを指定してテスト</strong></h6>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="python -m doctest -v external_module.py" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">python -m doctest -v external_module.py</span></span></code></pre></div>



<h2 class="wp-block-heading"><strong>doctestを使う際の注意点</strong></h2>



<ol class="wp-block-list">
<li><strong>複雑なテストには不向き</strong><br>複雑なロジックや多数の条件分岐がある場合は、<code>unittest</code>や<code>pytest</code>などのテストフレームワークを併用しましょう。</li>



<li><strong>フォーマットに注意</strong><br>サンプルコードとその出力は正確に記述する必要があります。インデントや改行が異なるとエラーになります。</li>



<li><strong>外部リソースの使用</strong><br>ファイル操作やネットワーク通信を伴うテストには向きません。</li>
</ol>



<h2 class="wp-block-heading"><strong>doctestと他のテストフレームワークの比較</strong></h2>



<figure class="wp-block-table"><div class="scrollable-table"><table class="has-fixed-layout"><thead><tr><th>フレームワーク</th><th>特徴</th></tr></thead><tbody><tr><td><strong>doctest</strong></td><td>ドキュメント内のサンプルコードをテスト可能</td></tr><tr><td><strong>unittest</strong></td><td>複雑なテストケースを管理・実行できる標準フレームワーク</td></tr><tr><td><strong>pytest</strong></td><td>柔軟で簡潔な構文を提供し、プラグインが豊富</td></tr></tbody></table></div></figure>



<h2 class="wp-block-heading"><strong>まとめ</strong></h2>



<p>Pythonの<code>doctest</code>モジュールは、コードのドキュメント化とテストを同時に行える便利なツールです。本記事で紹介した基本操作や応用例を参考に、<code>doctest</code>を活用してコードの品質向上を目指しましょう！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://techgrowup.net/python-doctest/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: techgrowup.net @ 2026-04-25 04:15:03 by W3 Total Cache
-->