{"componentChunkName":"component---src-templates-post-template-js","path":"/rust-test-en","result":{"data":{"markdownRemark":{"id":"5d118fd3-0405-5697-a382-08dd9cd33de0","html":"<p>This time, I am putting together some notes on Rust test syntax.</p>\n<!-- omit in toc -->\n<h2 id=\"table-of-contents\" style=\"position:relative;\"><a href=\"#table-of-contents\" aria-label=\"table of contents permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Table of Contents</h2>\n<ul>\n<li><a href=\"#about-rust-testing\">About Rust Testing</a></li>\n<li>\n<p><a href=\"#unit-tests\">Unit Tests</a></p>\n<ul>\n<li><a href=\"#basic-structure-of-unit-tests\">Basic Structure of Unit Tests</a></li>\n<li><a href=\"#unit-test-example-1\">Unit Test Example 1</a></li>\n<li><a href=\"#unit-test-example-2\">Unit Test Example 2</a></li>\n<li><a href=\"#unit-test-example-3\">Unit Test Example 3</a></li>\n<li><a href=\"#unit-test-example-4\">Unit Test Example 4</a></li>\n<li><a href=\"#other-notes-on-unit-tests\">Other Notes on Unit Tests</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#integration-tests\">Integration Tests</a></p>\n<ul>\n<li><a href=\"#basic-structure-of-integration-tests\">Basic Structure of Integration Tests</a></li>\n<li><a href=\"#integration-test-example-1\">Integration Test Example 1</a></li>\n<li><a href=\"#integration-test-example-2\">Integration Test Example 2</a></li>\n<li><a href=\"#integration-test-example-3\">Integration Test Example 3</a></li>\n</ul>\n</li>\n<li><a href=\"#summary\">Summary</a></li>\n</ul>\n<h2 id=\"about-rust-testing\" style=\"position:relative;\"><a href=\"#about-rust-testing\" aria-label=\"about rust testing permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>About Rust Testing</h2>\n<p>Rust provides the following three testing features out of the box.</p>\n<ul>\n<li>Unit tests</li>\n<li>Integration tests</li>\n<li>Documentation tests</li>\n</ul>\n<p>You can apparently add various other testing features by bringing in third-party crates, but this time I will focus on the standard testing approaches, mainly unit tests and integration tests.</p>\n<p>I will not use documentation tests this time, so I will skip them.</p>\n<h2 id=\"unit-tests\" style=\"position:relative;\"><a href=\"#unit-tests\" aria-label=\"unit tests permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Unit Tests</h2>\n<p>Unit tests are tests that verify individual functions or modules in isolation.</p>\n<p>In Rust, they can be implemented by placing them in a <code class=\"language-text\">#[cfg(test)]</code> module inside the same file as the code being tested.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">internal_helper</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">:</span> <span class=\"token keyword\">i32</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token keyword\">i32</span> <span class=\"token punctuation\">{</span>\n    x <span class=\"token operator\">*</span> <span class=\"token number\">2</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">pub</span> <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">public_function</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">:</span> <span class=\"token keyword\">i32</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token keyword\">i32</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">internal_helper</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token number\">1</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token attribute attr-name\">#[cfg(test)]</span>  <span class=\"token comment\">// Compiled only when running cargo test</span>\n<span class=\"token keyword\">mod</span> <span class=\"token module-declaration namespace\">tests</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">use</span> <span class=\"token keyword\">super</span><span class=\"token punctuation\">::</span><span class=\"token operator\">*</span><span class=\"token punctuation\">;</span>  <span class=\"token comment\">// Import all items from the parent module</span>\n\n    <span class=\"token attribute attr-name\">#[test]</span>\n    <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_internal_helper</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// Private functions can also be accessed directly</span>\n        <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span><span class=\"token function\">internal_helper</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token attribute attr-name\">#[test]</span>\n    <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_public_function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span><span class=\"token function\">public_function</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">11</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"basic-structure-of-unit-tests\" style=\"position:relative;\"><a href=\"#basic-structure-of-unit-tests\" aria-label=\"basic structure of unit tests permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Basic Structure of Unit Tests</h3>\n<p>To implement a simple unit test, I will use the following function.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token comment\">/// Adds two integers</span>\n<span class=\"token keyword\">pub</span> <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">add</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">:</span> <span class=\"token keyword\">i32</span><span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">:</span> <span class=\"token keyword\">i32</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token keyword\">i32</span> <span class=\"token punctuation\">{</span>\n    a <span class=\"token operator\">+</span> b\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>For this, implement the test module in the same file, with the <code class=\"language-text\">#[cfg(test)]</code> annotation added.</p>\n<p>Reference: <a href=\"https://doc.rust-lang.org/book/ch11-03-test-organization.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Test Organization - The Rust Programming Language</a></p>\n<p>A test module with the <code class=\"language-text\">#[cfg(test)]</code> annotation is compiled and run by Rust only when you execute <code class=\"language-text\">cargo test</code>.</p>\n<p>Because unit tests are written in the same file as the production source code, the <code class=\"language-text\">#[cfg(test)]</code> annotation is used to ensure that the test module is not included in build artifacts. (Integration tests are written in a separate file, so <code class=\"language-text\">#[cfg(test)]</code> is not required.)</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token attribute attr-name\">#[cfg(test)]</span>\n<span class=\"token keyword\">mod</span> <span class=\"token module-declaration namespace\">tests</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">use</span> <span class=\"token keyword\">super</span><span class=\"token punctuation\">::</span><span class=\"token operator\">*</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token attribute attr-name\">#[test]</span>\n    <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_add_basic</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">let</span> result <span class=\"token operator\">=</span> <span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token macro property\">assert!</span><span class=\"token punctuation\">(</span>result <span class=\"token operator\">==</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>This kind of test module can be run with <code class=\"language-text\">cargo test</code> or <code class=\"language-text\">cargo test &lt;test_function></code>.</p>\n<p>For example, in the sample above, you can confirm that the <code class=\"language-text\">add</code> function test succeeds by running <code class=\"language-text\">cargo test test_add_basic</code>.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 960px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/d41db702c4eff9c4e44bff10c85a8d02/aa61c/image-20260531161743127.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 17.916666666666668%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAIAAAABPYjBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAsklEQVQI11XOaw6DIAwAYO8AcTpBZSIPUdDgg6lL5v0vtY7sz740bdOmSZP8cvejX7yf12XbwgI5bOd5LOv6vq7Xec7zvO9P58YQgvdeawW07tqWJ1XDavGglBJC8jwviiLLMkJJVZbfqCoSlRE0jLE6glXirIXgTcMizrkQoiQUZSm+pRghhBH+h/BvlJiua5UkTd33xlprjJmmUQrpxjF+qIdhUFIqqXrYmU5IoOAKyges6iLtZ8vTDgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/d41db702c4eff9c4e44bff10c85a8d02/8ac56/image-20260531161743127.webp 240w,\n/static/d41db702c4eff9c4e44bff10c85a8d02/d3be9/image-20260531161743127.webp 480w,\n/static/d41db702c4eff9c4e44bff10c85a8d02/e46b2/image-20260531161743127.webp 960w,\n/static/d41db702c4eff9c4e44bff10c85a8d02/fa9eb/image-20260531161743127.webp 1065w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/d41db702c4eff9c4e44bff10c85a8d02/8ff5a/image-20260531161743127.png 240w,\n/static/d41db702c4eff9c4e44bff10c85a8d02/e85cb/image-20260531161743127.png 480w,\n/static/d41db702c4eff9c4e44bff10c85a8d02/d9199/image-20260531161743127.png 960w,\n/static/d41db702c4eff9c4e44bff10c85a8d02/aa61c/image-20260531161743127.png 1065w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/d41db702c4eff9c4e44bff10c85a8d02/d9199/image-20260531161743127.png\"\n            alt=\"image-20260531161743127\"\n            title=\"image-20260531161743127\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<h3 id=\"unit-test-example-1\" style=\"position:relative;\"><a href=\"#unit-test-example-1\" aria-label=\"unit test example 1 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Unit Test Example 1</h3>\n<p>In Rust unit tests, you can evaluate behavior with the standard <code class=\"language-text\">assert!</code> macro.</p>\n<p>For example, create the following three functions for testing.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token comment\">/// Adds two integers</span>\n<span class=\"token keyword\">pub</span> <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">add</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">:</span> <span class=\"token keyword\">i32</span><span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">:</span> <span class=\"token keyword\">i32</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token keyword\">i32</span> <span class=\"token punctuation\">{</span>\n    a <span class=\"token operator\">+</span> b\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">/// Multiplies two integers</span>\n<span class=\"token keyword\">pub</span> <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">multiply</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">:</span> <span class=\"token keyword\">i32</span><span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">:</span> <span class=\"token keyword\">i32</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token keyword\">i32</span> <span class=\"token punctuation\">{</span>\n    a <span class=\"token operator\">*</span> b\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">/// Checks whether a string is empty</span>\n<span class=\"token keyword\">pub</span> <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">is_empty</span><span class=\"token punctuation\">(</span>s<span class=\"token punctuation\">:</span> <span class=\"token operator\">&amp;</span><span class=\"token keyword\">str</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token keyword\">bool</span> <span class=\"token punctuation\">{</span>\n    s<span class=\"token punctuation\">.</span><span class=\"token function\">is_empty</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>To test the behavior of these functions, you can use separate test functions for each case.</p>\n<p>First, the function below uses the <code class=\"language-text\">assert!</code> macro to verify whether <code class=\"language-text\">add(2, 3)</code> returns 5.</p>\n<p><code class=\"language-text\">assert!</code> can verify that a condition is true.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token attribute attr-name\">#[test]</span>\n<span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_add_basic</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> result <span class=\"token operator\">=</span> <span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">assert!</span><span class=\"token punctuation\">(</span>result <span class=\"token operator\">==</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The <code class=\"language-text\">assert!</code> macro can also define the text to display when a test fails.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token attribute attr-name\">#[test]</span>\n<span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_add_with_text</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> result <span class=\"token operator\">=</span> <span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">assert!</span><span class=\"token punctuation\">(</span>result <span class=\"token operator\">==</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"2 + 3 = 5, but the actual result was {}.\"</span><span class=\"token punctuation\">,</span> result<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>If the test above fails, it can display text like the following.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 960px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/6a9e8f69d18090a2dcdaefcc68032966/4b2cc/image-20260531163634374.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 14.166666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAIAAAAcOLh5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAgklEQVQI1yWOSQ7DIAxFuUVDK6RiYbDNEJBKmt7/YnXIW1h/4T+YlFIuBTHEGEMIQiwXnGIUyd6/X4vn4hZ2CWutoUSt1TFGH+N3nnN+Wmu977UWAM/MGqoXEQFAhZaBByJyzhlty4u99+N7zDmZpdaqYUTpsoWAqCtkmUX/H4tt2/6K8Brn00HXsAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/6a9e8f69d18090a2dcdaefcc68032966/8ac56/image-20260531163634374.webp 240w,\n/static/6a9e8f69d18090a2dcdaefcc68032966/d3be9/image-20260531163634374.webp 480w,\n/static/6a9e8f69d18090a2dcdaefcc68032966/e46b2/image-20260531163634374.webp 960w,\n/static/6a9e8f69d18090a2dcdaefcc68032966/d5002/image-20260531163634374.webp 1013w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/6a9e8f69d18090a2dcdaefcc68032966/8ff5a/image-20260531163634374.png 240w,\n/static/6a9e8f69d18090a2dcdaefcc68032966/e85cb/image-20260531163634374.png 480w,\n/static/6a9e8f69d18090a2dcdaefcc68032966/d9199/image-20260531163634374.png 960w,\n/static/6a9e8f69d18090a2dcdaefcc68032966/4b2cc/image-20260531163634374.png 1013w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/6a9e8f69d18090a2dcdaefcc68032966/d9199/image-20260531163634374.png\"\n            alt=\"image-20260531163634374\"\n            title=\"image-20260531163634374\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>You can also use a macro called <code class=\"language-text\">assert_eq!</code>.</p>\n<p>This macro lets you confirm that the values of the two elements passed as parameters are equal.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token attribute attr-name\">#[test]</span>\n<span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_add_with_assert_eq</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Conversely, the <code class=\"language-text\">assert_ne!</code> macro lets you confirm that two elements do not match.</p>\n<p>In the example below, the result of running <code class=\"language-text\">multiply(3, 4)</code> is 12, so the test fails when the second parameter is 12.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token attribute attr-name\">#[test]</span>\n<span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_multiply_not_zero</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token macro property\">assert_ne!</span><span class=\"token punctuation\">(</span><span class=\"token function\">multiply</span><span class=\"token punctuation\">(</span><span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Also, because a test function can be used like an ordinary function, you can include things like variable declarations inside the test as shown below.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token attribute attr-name\">#[test]</span>\n<span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_with_setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> input_a <span class=\"token operator\">=</span> <span class=\"token number\">100</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">let</span> input_b <span class=\"token operator\">=</span> <span class=\"token number\">200</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">let</span> actual <span class=\"token operator\">=</span> <span class=\"token function\">add</span><span class=\"token punctuation\">(</span>input_a<span class=\"token punctuation\">,</span> input_b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span>actual<span class=\"token punctuation\">,</span> input_a <span class=\"token operator\">+</span> input_b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"unit-test-example-2\" style=\"position:relative;\"><a href=\"#unit-test-example-2\" aria-label=\"unit test example 2 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Unit Test Example 2</h3>\n<p>Next, implement simple code like the following using a custom <code class=\"language-text\">Point</code> struct.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token keyword\">use</span> <span class=\"token namespace\">std<span class=\"token punctuation\">::</span></span>fmt<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">pub</span> <span class=\"token keyword\">struct</span> <span class=\"token type-definition class-name\">Point</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">pub</span> x<span class=\"token punctuation\">:</span> <span class=\"token keyword\">f64</span><span class=\"token punctuation\">,</span>\n    <span class=\"token keyword\">pub</span> y<span class=\"token punctuation\">:</span> <span class=\"token keyword\">f64</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">impl</span> <span class=\"token class-name\">Point</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">pub</span> <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">new</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">:</span> <span class=\"token keyword\">f64</span><span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">:</span> <span class=\"token keyword\">f64</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token keyword\">Self</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">Self</span> <span class=\"token punctuation\">{</span> x<span class=\"token punctuation\">,</span> y <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">pub</span> <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">origin</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token keyword\">Self</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">Self</span> <span class=\"token punctuation\">{</span> x<span class=\"token punctuation\">:</span> <span class=\"token number\">0.0</span><span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">:</span> <span class=\"token number\">0.0</span> <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">pub</span> <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">distance_from_origin</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&amp;</span><span class=\"token keyword\">self</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token keyword\">f64</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token punctuation\">(</span><span class=\"token keyword\">self</span><span class=\"token punctuation\">.</span>x <span class=\"token operator\">*</span> <span class=\"token keyword\">self</span><span class=\"token punctuation\">.</span>x <span class=\"token operator\">+</span> <span class=\"token keyword\">self</span><span class=\"token punctuation\">.</span>y <span class=\"token operator\">*</span> <span class=\"token keyword\">self</span><span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">sqrt</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n    \n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">impl</span> <span class=\"token namespace\">fmt<span class=\"token punctuation\">::</span></span><span class=\"token class-name\">Display</span> <span class=\"token keyword\">for</span> <span class=\"token class-name\">Point</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">fmt</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&amp;</span><span class=\"token keyword\">self</span><span class=\"token punctuation\">,</span> f<span class=\"token punctuation\">:</span> <span class=\"token operator\">&amp;</span><span class=\"token keyword\">mut</span> <span class=\"token namespace\">fmt<span class=\"token punctuation\">::</span></span><span class=\"token class-name\">Formatter</span><span class=\"token operator\">&lt;</span><span class=\"token lifetime-annotation symbol\">'_</span><span class=\"token operator\">></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token namespace\">fmt<span class=\"token punctuation\">::</span></span><span class=\"token class-name\">Result</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token macro property\">write!</span><span class=\"token punctuation\">(</span>f<span class=\"token punctuation\">,</span> <span class=\"token string\">\"({}, {})\"</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">self</span><span class=\"token punctuation\">.</span>x<span class=\"token punctuation\">,</span> <span class=\"token keyword\">self</span><span class=\"token punctuation\">.</span>y<span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token comment\">// Create a Point using new</span>\n    <span class=\"token keyword\">let</span> p1 <span class=\"token operator\">=</span> <span class=\"token class-name\">Point</span><span class=\"token punctuation\">::</span><span class=\"token function\">new</span><span class=\"token punctuation\">(</span><span class=\"token number\">3.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">println!</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"p1 coordinates = {}\"</span><span class=\"token punctuation\">,</span> p1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// Create the origin using origin</span>\n    <span class=\"token keyword\">let</span> origin <span class=\"token operator\">=</span> <span class=\"token class-name\">Point</span><span class=\"token punctuation\">::</span><span class=\"token function\">origin</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">println!</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"origin coordinates = {}\"</span><span class=\"token punctuation\">,</span> origin<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\n    <span class=\"token comment\">// Calculate the distance from the origin using distance_from_origin</span>\n    <span class=\"token keyword\">let</span> distance <span class=\"token operator\">=</span> p1<span class=\"token punctuation\">.</span><span class=\"token function\">distance_from_origin</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">println!</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"p1 distance from origin = {}\"</span><span class=\"token punctuation\">,</span> distance<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token macro property\">println!</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>For this code, you can, for example, use the custom <code class=\"language-text\">Point</code> struct loaded inside a unit test as shown below.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token attribute attr-name\">#[cfg(test)]</span>\n<span class=\"token keyword\">mod</span> <span class=\"token module-declaration namespace\">tests</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">use</span> <span class=\"token keyword\">super</span><span class=\"token punctuation\">::</span><span class=\"token operator\">*</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token attribute attr-name\">#[test]</span>\n    <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_main_ne_custom_struct</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">let</span> p <span class=\"token operator\">=</span> <span class=\"token class-name\">Point</span><span class=\"token punctuation\">::</span><span class=\"token function\">new</span><span class=\"token punctuation\">(</span><span class=\"token number\">1.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token macro property\">assert_ne!</span><span class=\"token punctuation\">(</span>p<span class=\"token punctuation\">,</span> <span class=\"token class-name\">Point</span><span class=\"token punctuation\">::</span><span class=\"token function\">origin</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>However, if you run the test above with this code, the test will fail because the implementations of <code class=\"language-text\">Debug</code> and <code class=\"language-text\">PartialEq</code>, which <code class=\"language-text\">assert_ne!</code> depends on, do not exist.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 926px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/1e429381fd858c3d3e0197d56c5007be/69476/image-20260531224028164.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 28.750000000000004%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAIAAABM9SnKAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAzElEQVQY05WOWW6EMBBEOcTgZeKlDbbByzBAImHiJB/c/1DpYaT8JVKeWqWSunpp8ltcSp5ep1rrtm3HcZRS5vm+riua933//HrwUet+ssxLzrecsrW2GXVX3HgPcYwppmSMEVK0bSulVFoDgHMOPWhQSmGXMXo5IYQ0tHeEUTDmFmPw3vd9HIbB2hxC9J5zjosopRh9KmOMn6BpOHSEkl6IyUDQKigVAVATKsAz9BsN1+ZCaXoRm5JoWkLw0E+xP3kM40Pd9ZqEYP/kGwkrLRUfPiDoAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/1e429381fd858c3d3e0197d56c5007be/8ac56/image-20260531224028164.webp 240w,\n/static/1e429381fd858c3d3e0197d56c5007be/d3be9/image-20260531224028164.webp 480w,\n/static/1e429381fd858c3d3e0197d56c5007be/dafe9/image-20260531224028164.webp 926w\"\n              sizes=\"(max-width: 926px) 100vw, 926px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/1e429381fd858c3d3e0197d56c5007be/8ff5a/image-20260531224028164.png 240w,\n/static/1e429381fd858c3d3e0197d56c5007be/e85cb/image-20260531224028164.png 480w,\n/static/1e429381fd858c3d3e0197d56c5007be/69476/image-20260531224028164.png 926w\"\n            sizes=\"(max-width: 926px) 100vw, 926px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/1e429381fd858c3d3e0197d56c5007be/69476/image-20260531224028164.png\"\n            alt=\"image-20260531224028164\"\n            title=\"image-20260531224028164\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>When you use macros such as <code class=\"language-text\">assert_ne!</code> for tests involving a custom struct like this, you need to derive the implementation by adding <code class=\"language-text\">#[derive(Debug,PartialEq)]</code> to the struct.</p>\n<h3 id=\"unit-test-example-3\" style=\"position:relative;\"><a href=\"#unit-test-example-3\" aria-label=\"unit test example 3 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Unit Test Example 3</h3>\n<p>Up to this point, tests failed whenever a panic occurred inside a test function. However, for functions where you intentionally want a panic to occur, you can also test whether that panic occurs properly.</p>\n<p>For example, suppose you want to test the following division function, which triggers a panic when division by zero occurs.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token keyword\">pub</span> <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">divide</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">:</span> <span class=\"token keyword\">i32</span><span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">:</span> <span class=\"token keyword\">i32</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token keyword\">i32</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> b <span class=\"token operator\">==</span> <span class=\"token number\">0</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token macro property\">panic!</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Cannot divide by zero: {} / {}\"</span><span class=\"token punctuation\">,</span> a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    a <span class=\"token operator\">/</span> b\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>In this case, add the <code class=\"language-text\">#[should_panic]</code> attribute to the test function as shown below.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token attribute attr-name\">#[test]</span>\n<span class=\"token attribute attr-name\">#[should_panic]</span>\n<span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_divide_by_zero_panics</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">divide</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// Because it panics, the test succeeds</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>When this test is executed, it succeeds if a panic caused by division by zero occurs. Conversely, if no panic occurs and the division performed by the <code class=\"language-text\">divide</code> function succeeds, the test fails.</p>\n<p>Reference: <a href=\"https://doc.rust-lang.org/rust-by-example/testing/unit_testing.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Unit testing - Rust By Example</a></p>\n<p>You can also specify the message produced when the panic occurs in the attribute, as in <code class=\"language-text\">#[should_panic(expected = \"message\")]</code>.</p>\n<h3 id=\"unit-test-example-4\" style=\"position:relative;\"><a href=\"#unit-test-example-4\" aria-label=\"unit test example 4 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Unit Test Example 4</h3>\n<p>The following is quoted directly from the documentation sample, but by writing the <code class=\"language-text\">#[ignore]</code> attribute you can prevent a specific test function from being executed during <code class=\"language-text\">cargo test</code>.</p>\n<p>You can run such excluded tests with <code class=\"language-text\">cargo test -- --ignored</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token keyword\">pub</span> <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">add</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">:</span> <span class=\"token keyword\">i32</span><span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">:</span> <span class=\"token keyword\">i32</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token keyword\">i32</span> <span class=\"token punctuation\">{</span>\n    a <span class=\"token operator\">+</span> b\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token attribute attr-name\">#[cfg(test)]</span>\n<span class=\"token keyword\">mod</span> <span class=\"token module-declaration namespace\">tests</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">use</span> <span class=\"token keyword\">super</span><span class=\"token punctuation\">::</span><span class=\"token operator\">*</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token attribute attr-name\">#[test]</span>\n    <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_add</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token attribute attr-name\">#[test]</span>\n    <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_add_hundred</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">100</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">102</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">102</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token attribute attr-name\">#[test]</span>\n    <span class=\"token attribute attr-name\">#[ignore]</span>\n    <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">ignored_test</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"other-notes-on-unit-tests\" style=\"position:relative;\"><a href=\"#other-notes-on-unit-tests\" aria-label=\"other notes on unit tests permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Other Notes on Unit Tests</h3>\n<p>Rust tests appear to run in parallel on multiple threads by default.</p>\n<p>For that reason, if multiple tests need to share resources such as files or a DB, you need to be careful to protect those resources appropriately, for example by using a <code class=\"language-text\">Mutex</code>.</p>\n<p>If you want to disable parallel execution during tests, you can use <code class=\"language-text\">cargo test -- --test-threads=1</code>.</p>\n<p>Reference: <a href=\"https://doc.rust-jp.rs/book-ja/ch11-02-running-tests.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Controlling How Tests Are Run - The Rust Programming Language (Japanese Edition)</a></p>\n<p>Also, because the execution order of tests is not guaranteed, you need to be careful not to create dependencies between tests.</p>\n<h2 id=\"integration-tests\" style=\"position:relative;\"><a href=\"#integration-tests\" aria-label=\"integration tests permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Integration Tests</h2>\n<h3 id=\"basic-structure-of-integration-tests\" style=\"position:relative;\"><a href=\"#basic-structure-of-integration-tests\" aria-label=\"basic structure of integration tests permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Basic Structure of Integration Tests</h3>\n<p>Rust integration tests run from outside the crate and test a program using only its public interface, from the same perspective as a user.</p>\n<p>Integration tests are used to verify that the modules in a library work together correctly.</p>\n<p>Cargo treats a <code class=\"language-text\">tests</code> directory placed alongside the <code class=\"language-text\">src</code> directory as integration tests, as shown below.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">my_project/\n├── Cargo.toml\n├── src/\n│   ├── lib.rs          <span class=\"token comment\"># Main library implementation</span>\n│   └── utils.rs\n└── tests/              <span class=\"token comment\"># Directory dedicated to integration tests</span>\n    ├── api_test.rs     <span class=\"token comment\"># Individual test file (each is its own crate)</span>\n    ├── edge_cases.rs\n    └── common/         <span class=\"token comment\"># Shared test utilities</span>\n        └── mod.rs      <span class=\"token comment\"># Because it is mod.rs, it is not recognized as a test file, so helper code for tests can be placed here</span></code></pre></div>\n<p>Reference: <a href=\"https://doc.rust-jp.rs/rust-by-example-ja/testing/integration_testing.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Integration Testing - Rust By Example (Japanese Edition)</a></p>\n<h3 id=\"integration-test-example-1\" style=\"position:relative;\"><a href=\"#integration-test-example-1\" aria-label=\"integration test example 1 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Integration Test Example 1</h3>\n<p>This time, I will create integration tests for a calculator library that I had Claude throw together.</p>\n<p>When using this library from a client program, the application needs to import the various modules from the <code class=\"language-text\">rust_integration_test_samples</code> crate as follows.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token keyword\">use</span> <span class=\"token namespace\">rust_integration_test_samples<span class=\"token punctuation\">::</span>calculator<span class=\"token punctuation\">::</span></span><span class=\"token class-name\">Calculator</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">use</span> <span class=\"token namespace\">rust_integration_test_samples<span class=\"token punctuation\">::</span>storage<span class=\"token punctuation\">::</span></span><span class=\"token punctuation\">{</span><span class=\"token class-name\">Storage</span><span class=\"token punctuation\">,</span> <span class=\"token class-name\">StorageValue</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">use</span> <span class=\"token namespace\">rust_integration_test_samples<span class=\"token punctuation\">::</span>user<span class=\"token punctuation\">::</span></span><span class=\"token punctuation\">{</span><span class=\"token class-name\">Role</span><span class=\"token punctuation\">,</span> <span class=\"token class-name\">UserService</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>The same applies to test code that performs integration tests. Just as when implementing a client program, the test code also needs to import modules in order to use the library from the outside.</p>\n<p>The following is the simplest integration test implementation.</p>\n<p>Below, just like a client program, the test imports the library’s <code class=\"language-text\">Calculator</code> module and tests the return values of functions such as <code class=\"language-text\">add</code>, <code class=\"language-text\">subtract</code>, and <code class=\"language-text\">multiply</code> in a test function called <code class=\"language-text\">test_calculator_basic_operations</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token keyword\">use</span> <span class=\"token namespace\">rust_integration_test_samples<span class=\"token punctuation\">::</span>calculator<span class=\"token punctuation\">::</span></span><span class=\"token class-name\">Calculator</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token attribute attr-name\">#[test]</span>\n<span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_calculator_basic_operations</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> <span class=\"token keyword\">mut</span> calc <span class=\"token operator\">=</span> <span class=\"token class-name\">Calculator</span><span class=\"token punctuation\">::</span><span class=\"token function\">new</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span>calc<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">2.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span>calc<span class=\"token punctuation\">.</span><span class=\"token function\">subtract</span><span class=\"token punctuation\">(</span><span class=\"token number\">10.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">6.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span>calc<span class=\"token punctuation\">.</span><span class=\"token function\">multiply</span><span class=\"token punctuation\">(</span><span class=\"token number\">3.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">7.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">21.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>This test code is written in a file placed under <code class=\"language-text\">tests</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">my_project/\n├── Cargo.toml\n├── src/\n│   ├── lib.rs          <span class=\"token comment\"># Main library implementation</span>\n│   └── utils.rs\n└── tests/              <span class=\"token comment\"># Directory dedicated to integration tests</span>\n    └── api_test.rs     <span class=\"token comment\"># Individual test file (each is its own crate)</span></code></pre></div>\n<h3 id=\"integration-test-example-2\" style=\"position:relative;\"><a href=\"#integration-test-example-2\" aria-label=\"integration test example 2 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Integration Test Example 2</h3>\n<p>You can also test normal and error cases in the same test code as shown below.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token comment\">/// Division test (normal case)</span>\n<span class=\"token attribute attr-name\">#[test]</span>\n<span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_calculator_division</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> <span class=\"token keyword\">mut</span> calc <span class=\"token operator\">=</span> <span class=\"token class-name\">Calculator</span><span class=\"token punctuation\">::</span><span class=\"token function\">new</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">let</span> result <span class=\"token operator\">=</span> calc<span class=\"token punctuation\">.</span><span class=\"token function\">divide</span><span class=\"token punctuation\">(</span><span class=\"token number\">10.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">,</span> <span class=\"token class-name\">Ok</span><span class=\"token punctuation\">(</span><span class=\"token number\">5.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">/// Division test (error case: division by zero)</span>\n<span class=\"token attribute attr-name\">#[test]</span>\n<span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_calculator_division_by_zero</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> <span class=\"token keyword\">mut</span> calc <span class=\"token operator\">=</span> <span class=\"token class-name\">Calculator</span><span class=\"token punctuation\">::</span><span class=\"token function\">new</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">let</span> result <span class=\"token operator\">=</span> calc<span class=\"token punctuation\">.</span><span class=\"token function\">divide</span><span class=\"token punctuation\">(</span><span class=\"token number\">10.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">,</span> <span class=\"token class-name\">Err</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">CalcError</span><span class=\"token punctuation\">::</span><span class=\"token class-name\">DivisionByZero</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>The <code class=\"language-text\">divide</code> function on the library side is implemented as follows and returns <code class=\"language-text\">Result&lt;f64, CalcError></code>, so the integration test code also evaluates the result with assertions such as <code class=\"language-text\">assert_eq!(result, Ok(5.0));</code> and <code class=\"language-text\">assert_eq!(result, Err(CalcError::DivisionByZero));</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token keyword\">pub</span> <span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">divide</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&amp;</span><span class=\"token keyword\">mut</span> <span class=\"token keyword\">self</span><span class=\"token punctuation\">,</span> a<span class=\"token punctuation\">:</span> <span class=\"token keyword\">f64</span><span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">:</span> <span class=\"token keyword\">f64</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">-></span> <span class=\"token class-name\">Result</span><span class=\"token operator\">&lt;</span><span class=\"token keyword\">f64</span><span class=\"token punctuation\">,</span> <span class=\"token class-name\">CalcError</span><span class=\"token operator\">></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> b <span class=\"token operator\">==</span> <span class=\"token number\">0.0</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token class-name\">Err</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">CalcError</span><span class=\"token punctuation\">::</span><span class=\"token class-name\">DivisionByZero</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">let</span> result <span class=\"token operator\">=</span> a <span class=\"token operator\">/</span> b<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">self</span><span class=\"token punctuation\">.</span><span class=\"token function\">record</span><span class=\"token punctuation\">(</span><span class=\"token macro property\">format!</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"{} / {}\"</span><span class=\"token punctuation\">,</span> a<span class=\"token punctuation\">,</span> b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> result<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token class-name\">Ok</span><span class=\"token punctuation\">(</span>result<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"integration-test-example-3\" style=\"position:relative;\"><a href=\"#integration-test-example-3\" aria-label=\"integration test example 3 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Integration Test Example 3</h3>\n<p>In integration tests, you can also test state after a sequence of operations in the same way a user would operate a client program.</p>\n<p>For example, in the sample below, the test checks the number of calculation history entries managed by the library after calculations are performed and after the history is cleared, and it also verifies that calculations can continue after the history has been cleared.</p>\n<div class=\"gatsby-highlight\" data-language=\"rust\"><pre class=\"language-rust\"><code class=\"language-rust\"><span class=\"token attribute attr-name\">#[test]</span>\n<span class=\"token keyword\">fn</span> <span class=\"token function-definition function\">test_calculator_history_management</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> <span class=\"token keyword\">mut</span> calc <span class=\"token operator\">=</span> <span class=\"token class-name\">Calculator</span><span class=\"token punctuation\">::</span><span class=\"token function\">new</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// Initial state</span>\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span>calc<span class=\"token punctuation\">.</span><span class=\"token function\">history</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">len</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// Perform operations</span>\n    calc<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">1.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    calc<span class=\"token punctuation\">.</span><span class=\"token function\">multiply</span><span class=\"token punctuation\">(</span><span class=\"token number\">3.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span>calc<span class=\"token punctuation\">.</span><span class=\"token function\">history</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">len</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// Clear history</span>\n    calc<span class=\"token punctuation\">.</span><span class=\"token function\">clear_history</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span>calc<span class=\"token punctuation\">.</span><span class=\"token function\">history</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">len</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// Operations are still possible after clearing</span>\n    calc<span class=\"token punctuation\">.</span><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token number\">5.0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">6.0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token macro property\">assert_eq!</span><span class=\"token punctuation\">(</span>calc<span class=\"token punctuation\">.</span><span class=\"token function\">history</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">len</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"summary\" style=\"position:relative;\"><a href=\"#summary\" aria-label=\"summary permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Summary</h2>\n<p>There are many more patterns for unit tests and integration tests, and it seems possible to implement more complex tests as well, but I will stop here for now.</p>\n<p>Lately I rely on AI all the time, so I want to get better at writing tests more aggressively myself.</p>","fields":{"slug":"/rust-test-en","tagSlugs":["/tag/rust-en/","/tag/english/"]},"frontmatter":{"date":"2026-06-01","description":"","tags":["Rust (en)","English"],"title":"Notes on Test of Rust ","socialImage":{"publicURL":"/static/42a86ef0996119572315112587f870d4/rust-test.png"}}}},"pageContext":{"slug":"/rust-test-en"}},"staticQueryHashes":["251939775","401334301","825871152"]}