{"id":4532,"date":"2026-07-01T07:00:00","date_gmt":"2026-06-30T22:00:00","guid":{"rendered":"https:\/\/litcoder.com\/?p=4532"},"modified":"2026-06-26T21:51:24","modified_gmt":"2026-06-26T12:51:24","slug":"rust%ec%99%80-python-unit-test%ec%9d%98-%ea%b3%b5%ec%a1%b4","status":"publish","type":"post","link":"https:\/\/litcoder.com\/?p=4532","title":{"rendered":"Rust\uc640 Python unit test\uc758 \uacf5\uc874"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/litcoder.com\/?p=4256\" data-type=\"link\" data-id=\"https:\/\/litcoder.com\/?p=4256\">\uc608\uc804 \uae00<\/a>\uc5d0\uc11c vscode\uc758 test explorer\uc5d0 Rust\uc758 unittest\uac00 \ubcf4\uc774\ub3c4\ub85d \uc124\uc815\ud558\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8ec \uc801\uc774 \uc788\uc5c8\ub294\ub370, \uc5ec\uae30\uc5d0 Python test case (\uc5ec\uae30\uc11c\ub294 pytest)\ub3c4 \ud568\uaed8 \ud45c\uc2dc\ub418\ub3c4\ub85d \ud558\ub824\uba74 <code>.vscode\/settings.json<\/code>\uc744 \ud3b8\uc9d1\ud574 \uc8fc\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud574\ub2f9 \ud504\ub85c\uc81d\ud2b8\uc758 \uacbd\uc6b0 \uac00\uc0c1\ud658\uacbd\uc744 source root\uc5d0 \ub450\uc9c0 \uc54a\uace0 \uc11c\ube0c \ub514\ub809\ud1a0\ub9ac\uc778 <code>service\/.venv<\/code> \uc548\uc5d0 \ub123\uc5b4 \ub450\uc5c8\uae30 \ub54c\ubb38\uc5d0 <code>python.defaultInterpreterPath<\/code> \uac12\uc744 \uc774\uacf3\uc73c\ub85c \uc9c1\uc811 \uc124\uc815\ud574 \uc8fc\uace0 pytest \uc0ac\uc6a9\uc744 \uc704\ud55c \uc124\uc815\ub3c4 \ud574  \ub450\uc5c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"json\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n    \/\/ Rust unit test\n    \"rust-analyzer.testExplorer\": true,\n\n    \/\/ Python virtual environment\uc6a9 \uc778\ud130\ud504\ub9ac\ud130 \uc124\uc815\n    \"python.defaultInterpreterPath\": \"${workspaceFolder}\/service\/.venv\/bin\/python\", \n    \n    \/\/ pytest \uc0ac\uc6a9\n    \"python.testing.pytestEnabled\": true,\n    \"python.testing.unittestEnabled\": false,\n\n    \/\/ Python unit test\uac00 \uc788\ub294 \ub514\ub809\ud1a0\ub9ac \uacbd\ub85c\n    \"python.testing.pytestArgs\": [\n        \"service\/test\"\n    ],\n    \"python-envs.defaultEnvManager\": \"ms-python.python:venv\"\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 \ub098\uc11c vscode GUI\uc5d0\uc11c\ub3c4 \ub2e4\uc2dc \ud55c\ubc88 venv\ub97c \uc124\uc815\ud574 \uc900\ub2e4. \uadf8\ub0e5 \ud504\ub85c\uadf8\ub7a8\uc744 \uc7ac \uc2e4\ud589 \ud588\uc73c\uba74 \uc774 \ubd80\ubd84\uc740 \uac74\ub108 \ub6f0\uc5b4\ub3c4 \ub418\uc5c8\uc744 \uac83 \uac19\uae34 \ud55c\ub370, \uc624\ub958\uac00 \uacc4\uc18d \ub728\uae38\ub798 \uc218\ub3d9\uc73c\ub85c \uc124\uc815\ud574 \uc8fc\uc5c8\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"431\" height=\"19\" src=\"https:\/\/litcoder.com\/wp-content\/uploads\/2026\/06\/vscode_venv_python.png\" alt=\"\" class=\"wp-image-4536\" srcset=\"https:\/\/litcoder.com\/wp-content\/uploads\/2026\/06\/vscode_venv_python.png 431w, https:\/\/litcoder.com\/wp-content\/uploads\/2026\/06\/vscode_venv_python-300x13.png 300w\" sizes=\"auto, (max-width: 431px) 100vw, 431px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">\uc774\ub807\uac8c \ud558\uace0 \ub098\uba74 test explorer\uc5d0 \ub450 \uc5b8\uc5b4\uc758 test case\ub4e4\uc774 \ubaa8\ub450 \ud45c\uc2dc\ub418\ub294 \ud3c9\ud654\ub85c\uc6b4 \uacf5\uc874\uc0c1\ud0dc\uac00 \ub41c\ub2e4.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"275\" height=\"560\" src=\"https:\/\/litcoder.com\/wp-content\/uploads\/2026\/06\/test_exp_rust_python.png\" alt=\"\" class=\"wp-image-4537\" srcset=\"https:\/\/litcoder.com\/wp-content\/uploads\/2026\/06\/test_exp_rust_python.png 275w, https:\/\/litcoder.com\/wp-content\/uploads\/2026\/06\/test_exp_rust_python-147x300.png 147w\" sizes=\"auto, (max-width: 275px) 100vw, 275px\" \/><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\uc608\uc804 \uae00\uc5d0\uc11c vscode\uc758 test explorer\uc5d0 Rust\uc758 unittest\uac00 \ubcf4\uc774\ub3c4\ub85d \uc124\uc815\ud558\ub294 \ubc29\ubc95\uc744 \ub2e4\ub8ec \uc801\uc774 \uc788\uc5c8\ub294\ub370, \uc5ec\uae30\uc5d0 Python test case (\uc5ec\uae30\uc11c\ub294 pytest)\ub3c4 \ud568\uaed8 \ud45c\uc2dc\ub418\ub3c4\ub85d \ud558\ub824\uba74 .vscode\/settings.json\uc744 \ud3b8\uc9d1\ud574 \uc8fc\uc5b4\uc57c \ud55c\ub2e4. \ud574\ub2f9 \ud504\ub85c\uc81d\ud2b8\uc758 \uacbd\uc6b0 \uac00\uc0c1\ud658\uacbd\uc744 source root\uc5d0 \ub450\uc9c0 \uc54a\uace0 \uc11c\ube0c \ub514\ub809\ud1a0\ub9ac\uc778 service\/.venv \uc548\uc5d0 \ub123\uc5b4 \ub450\uc5c8\uae30 \ub54c\ubb38\uc5d0 python.defaultInterpreterPath \uac12\uc744 \uc774\uacf3\uc73c\ub85c \uc9c1\uc811 \uc124\uc815\ud574 \uc8fc\uace0 pytest \uc0ac\uc6a9\uc744 \uc704\ud55c \uc124\uc815\ub3c4 \ud574 \ub450\uc5c8\ub2e4. \uadf8\ub9ac\uace0 \ub098\uc11c [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[6],"tags":[452,105,423,293,279],"class_list":["post-4532","post","type-post","status-publish","format-standard","hentry","category-tools","tag-configuration","tag-python","tag-rust","tag-unittest","tag-vscode"],"jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":4256,"url":"https:\/\/litcoder.com\/?p=4256","url_meta":{"origin":4532,"position":0},"title":"VScode test explorer\uc5d0 Rust \ud14c\uc2a4\ud2b8 \ucf00\uc774\uc2a4 \ud45c\uc2dc","author":"litcoder","date":"2026\ub144 4\uc6d4 1\uc77c","format":false,"excerpt":"rust-analyzer extension\uc744 \uc124\uce58\ud588\ub294\ub370\ub3c4 test explorer\uc5d0\uc11c rust unit test\uac00 \ud45c\uc2dc\ub418\uc9c0 \uc54a\ub294 \uacbd\uc6b0\ub294 \ub2e4\uc74c\uc744 \ud655\uc778\ud574 \ubcf4\uc790. Command palette\uc744 \uc5f4\uc5b4\uc11c open settings\ub97c \uac80\uc0c9\ud55c\ub2e4. \uc67c\ucabd pane\uc5d0\uc11c Extensions -> rust-analyzer\ub97c \uc120\ud0dd\ud558\uace0 Test Explorer \ud56d\ubaa9\uc744 \ucc3e\uc544 \"Show the Test Explorer view.\"\uac00 \uccb4\ud06c\ub418\uc5b4 \uc788\ub294\uc9c0 \ud655\uc778\ud55c\ub2e4. \ud55c\ucc38\uc744 \ucc3e\uc558\ub294\ub370 \uacb0\uad6d\uc740 \uc774\uac8c disabled\ub41c \uac83\uc774 \uc6d0\uc778 \uc774\uc5c8\ub2e4. \uc774 \ud56d\ubaa9\uc744 \uccb4\ud06c\ud558\uace0 \ub098\uba74\u2026","rel":"","context":"&quot;Tools &amp; Tips&quot;\uc5d0\uc11c","block_context":{"text":"Tools &amp; Tips","link":"https:\/\/litcoder.com\/?cat=6"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2026\/02\/rust_txset_enabled.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2026\/02\/rust_txset_enabled.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2026\/02\/rust_txset_enabled.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":4528,"url":"https:\/\/litcoder.com\/?p=4528","url_meta":{"origin":4532,"position":1},"title":"Rust unittest\ub97c \uc704\ud55c \uc758\uc874\uc131 \uaca9\ub9ac","author":"litcoder","date":"2026\ub144 9\uc6d4 2\uc77c","format":false,"excerpt":"\ub2e4\ud589\ud788\ub3c4 \uc6b0\ub9ac\ub294 unittest\uc758 \uc720\uc6a9\ud568 \uc798 \uc54c\ub824\uc9c4 \uc2dc\ub300\uc5d0 \uc0b4\uace0 \uc788\uae30\uc5d0 \ub354 \uc774\uc0c1 unittest\ub97c \uc9c0\uc6d0\ud558\ub294 \ud504\ub85c\uadf8\ub798\ubc0d \uc5b8\uc5b4\ub97c \ud2b9\ubcc4\ud558\uac8c \ubc1b\uc544\ub4e4\uc774\uc9c0 \uc54a\ub294\ub2e4. Rust\ub294 \ube44\uad50\uc801 \ucd5c\uc2e0 \uc5b8\uc5b4\uc778 \ub9cc\ud07c \uc774\ub7ec\ud55c \uc694\uad6c\uc0ac\ud56d\ub4e4\uc744 \uc801\uadf9\uc801\uc73c\ub85c \ubc1b\uc544\ub4e4\uc5ec \ubd80\uac00\uc801\uc778 \ud504\ub808\uc784\uc6cc\ud06c\uc758 \ub3c4\uc6c0 \uc5c6\uc774\ub3c4 \uc5b8\uc5b4 \uc790\uccb4\uc5d0\uc11c \uae30\ubcf8\uc801\uc778 unittest\uac00 \uc798 \uc9c0\uc6d0\ub41c\ub2e4. \ub2e4\ub9cc, Rust\ub294 \uc0c1\uc18d\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 Python, Java, C++ \uac19\uc740 \uac1d\uccb4\uc9c0\ud5a5 \uc5b8\uc5b4\uc5d0\uc11c \uc758\uc874\uc131\uc744\u2026","rel":"","context":"&quot;Programming&quot;\uc5d0\uc11c","block_context":{"text":"Programming","link":"https:\/\/litcoder.com\/?cat=5"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4654,"url":"https:\/\/litcoder.com\/?p=4654","url_meta":{"origin":4532,"position":2},"title":"PyO3\ub85c Rust code\uc5d0\uc11c Python module \uc0ac\uc6a9\ud558\uae30","author":"litcoder","date":"2026\ub144 8\uc6d4 19\uc77c","format":false,"excerpt":"PyO3\ub97c \uc774\uc6a9\ud558\uba74 Rust\uc5d0\uc11c Python\uc744 \ud638\ucd9c\ud558\uac70\ub098 \ubc18\ub300\ub85c Python\uc5d0\uc11c Rust\ub97c \ud638\ucd9c\ud558\ub294 \ubc14\uc778\ub529\uc744 \uad6c\ud604\ud560 \uc218 \uc788\ub2e4. \uc774 \ud3ec\uc2a4\ud305\uc5d0\uc11c\ub294 \uc608\uc804\uc5d0 \ud574\ubd24\ub358 Datumaro\ub85c \ub370\uc774\ud130\uc14b\uc744 detect\ud558\ub294 Python\ud568\uc218\ub97c Rust\ub85c \ud638\ucd9c\ud558\ub294 \uc608\uc81c\ub97c \uad6c\ud604\ud574 \ubcf8\ub2e4. Python \uc758\uc874\uc124 \uc124\uce58 Python \uad00\ub828\ud55c \uc758\uc874\uc131\uc740 \uc608\uc804\uacfc \uac19\uc774 Datumaro\ub97c \uc0ac\uc6a9\ud558\ub294\ub370 \ud544\uc694\ud55c \uac83\ub4e4\uc744 \uc124\uce58\ud574 \uc900\ub2e4. pip install 'datumaro[tf,tfds]' \\ tensorboardX \\ tensorflow-dataset \\ importlib_resources \\\u2026","rel":"","context":"&quot;Programming&quot;\uc5d0\uc11c","block_context":{"text":"Programming","link":"https:\/\/litcoder.com\/?cat=5"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2026\/07\/sc_dsdetect_rust.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2026\/07\/sc_dsdetect_rust.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2026\/07\/sc_dsdetect_rust.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2026\/07\/sc_dsdetect_rust.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":3392,"url":"https:\/\/litcoder.com\/?p=3392","url_meta":{"origin":4532,"position":3},"title":"VSCode\uc5d0\uc11c GTest \ud14c\uc2a4\ud2b8 \ud56d\ubaa9 \ud45c\uc2dc\ud558\uae30","author":"litcoder","date":"2024\ub144 4\uc6d4 20\uc77c","format":false,"excerpt":"VSCode\uc758 Test Explorer\uc5d0 test case\ub4e4\uc744 \ud45c\uc2dc\ud558\uba74 \uadc0\ucc2e\uc740 \ud30c\ub77c\ubbf8\ud130 \uc785\ub825 \uc5c6\uc774\ub3c4 \ud2b9\uc815 \ud14c\uc2a4\ud2b8\ucf00\uc774\uc2a4\ub97c \uc2e4\ud589\ud558\uac70\ub098 \ub514\ubc84\uadf8\ud560 \uc218 \uc788\uc5b4\uc11c \uc5ec\ub7ec\ubaa8\ub85c \ud3b8\ub9ac\ud55c \uc810\uc774 \ub9ce\ub2e4. \ud558\uc9c0\ub9cc GTest\ub85c \uc791\uc131\ud55c C++ \ud14c\uc2a4\ud2b8\ucf00\uc774\uc2a4\ub4e4\uc740 \uc790\ub3d9\uc73c\ub85c discover\ub418\uc9c0 \uc54a\uc544\uc11c \uc57d\uac04\uc758 \uc124\uc815\uc744 \ud574\uc8fc\uc5b4\uc57c \ud55c\ub2e4. \ubcf5\uc7a1\ud55c \uac83\uc740 \uc544\ub2c8\uace0 \uc544\ub798\uc640 \uac19\uc774 GTest\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 CMake \ud568\uc218\uc778 gtest_discover_tests()\ub97c \uc774\uc6a9\ud558\uba74 \ub41c\ub2e4. # Allow ctest to discover unittests.\u2026","rel":"","context":"&quot;Tools &amp; Tips&quot;\uc5d0\uc11c","block_context":{"text":"Tools &amp; Tips","link":"https:\/\/litcoder.com\/?cat=6"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2024\/04\/vscode_gtest_explorer.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":4281,"url":"https:\/\/litcoder.com\/?p=4281","url_meta":{"origin":4532,"position":4},"title":"Rust: comparison is useless due to type limits","author":"litcoder","date":"2026\ub144 6\uc6d4 17\uc77c","format":false,"excerpt":"\"\ud0c0\uc785 \uc81c\ud55c \ub54c\ubb38\uc5d0 \uc774 \ube44\uad50\uc5f0\uc0b0\uc740 \uc4f8.\ubaa8.\uc5c6.\ub2e4.\" IndexSet\uc774 \ud558\ub098 \uc788\ub2e4\uace0 \ud560 \ub54c, \uadf8 \uc548\uc5d0 \ud558\ub098\ub77c\ub3c4 \uc544\uc774\ud15c\uc774 \uc788\uc73c\uba74 true\ub97c \ubc18\ud658\ud558\uace0 \uc544\ub2c8\uba74 false\ub97c \ubc18\ud658\ud558\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 Rust code\ub97c \uc0dd\uac01\ud574 \ubcf4\uc790. use indexmap::IndexSet; fn has_item(item_set: &IndexSet<String>) -> bool { item_set.iter().count() >= 0 } \uac04\ub2e8\ud558\uac8c unittest\uc5d0 \ub123\uc5b4\uc11c \uc0c8\ub85c \uc0dd\uc131\ud574\uc11c \uc544\ubb34 \uc6d0\uc18c\ub3c4 \uc5c6\ub294 IndexSet\uc744 \ud558\ub098 \ub9cc\ub4e4\uc5b4\uc11c\u2026","rel":"","context":"&quot;Programming&quot;\uc5d0\uc11c","block_context":{"text":"Programming","link":"https:\/\/litcoder.com\/?cat=5"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2026\/05\/rust_unused_comparisons.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":3090,"url":"https:\/\/litcoder.com\/?p=3090","url_meta":{"origin":4532,"position":5},"title":"Visual Studio Code test explorer\uc5d0\uc11c explorer\ub85c \ubcc0\uacbd\ub418\ub294 \ubb38\uc81c","author":"litcoder","date":"2022\ub144 3\uc6d4 15\uc77c","format":false,"excerpt":"VSCode\uc5d0\uc11c test explorer\uac00 \uc790\ub3d9\uc73c\ub85c explorer\ub85c \ubcc0\uacbd\ub418\ub294 \uac83\uc744 \ub9c9\uae30 \uc704\ud55c \ubc29\ubc95.","rel":"","context":"&quot;Tools &amp; Tips&quot;\uc5d0\uc11c","block_context":{"text":"Tools &amp; Tips","link":"https:\/\/litcoder.com\/?cat=6"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2022\/03\/sc_vscode_testing_opentesting.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2022\/03\/sc_vscode_testing_opentesting.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2022\/03\/sc_vscode_testing_opentesting.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/litcoder.com\/wp-content\/uploads\/2022\/03\/sc_vscode_testing_opentesting.png?resize=700%2C400&ssl=1 2x"},"classes":[]}],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/litcoder.com\/index.php?rest_route=\/wp\/v2\/posts\/4532","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/litcoder.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/litcoder.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/litcoder.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/litcoder.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4532"}],"version-history":[{"count":8,"href":"https:\/\/litcoder.com\/index.php?rest_route=\/wp\/v2\/posts\/4532\/revisions"}],"predecessor-version":[{"id":4567,"href":"https:\/\/litcoder.com\/index.php?rest_route=\/wp\/v2\/posts\/4532\/revisions\/4567"}],"wp:attachment":[{"href":"https:\/\/litcoder.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4532"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/litcoder.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4532"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/litcoder.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}