Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
名単体テスト 禁断の傀儡(モック)
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
iwamot
PRO
May 14, 2025
Technology
1
640
名単体テスト 禁断の傀儡(モック)
2025-05-14
シネマ de LT会〜あなたのナレッジ大上映〜
https://aeon.connpass.com/event/352070/
iwamot
PRO
May 14, 2025
Tweet
Share
More Decks by iwamot
See All by iwamot
AIエージェント・マイクロサービス時代。AWSでの手軽な構築法を考えて試してみた
iwamot
PRO
1
59
これがLambdaレス時代のChatOpsだ!実例で学ぶAmazon Q Developerカスタムアクション活用法
iwamot
PRO
10
1.9k
Developer Certificate of Origin、よさそう
iwamot
PRO
0
48
復号できなくなると怖いので、AWS KMSキーの削除を「面倒」にしてみた CODT 2025 クロージングイベント版
iwamot
PRO
1
140
復号できなくなると怖いので、AWS KMSキーの削除を「面倒」にしてみた
iwamot
PRO
3
120
IPA&AWSダブル全冠が明かす、人生を変えた勉強法のすべて
iwamot
PRO
14
12k
2年でここまで成長!AWSで育てたAI Slack botの軌跡
iwamot
PRO
4
1.2k
クォータ監視、AWS Organizations環境でも楽勝です✌️
iwamot
PRO
2
620
Cline、めっちゃ便利、お金が飛ぶ💸
iwamot
PRO
22
22k
Other Decks in Technology
See All in Technology
[続・営業向け 誰でも話せるOCI セールストーク] AWSよりOCIの優位性が分からない編(2026年2月20日開催)
oracle4engineer
PRO
0
140
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.4k
競争優位を生み出す戦略的内製開発の実践技法
masuda220
PRO
2
490
三菱UFJ銀行におけるエンタープライズAI駆動開発のリアル / Enterprise AI_Driven Development at MUFG Bank: The Real Story
muit
10
20k
dbt meetup #19 『dbtを『なんとなく動かす』を卒業します』
tiltmax3
0
130
チームメンバー迷わないIaC設計
hayama17
4
2.9k
1 年間の育休から時短勤務で復帰した私が、 AI を駆使して立ち上がりを早めた話
lycorptech_jp
PRO
0
190
バクラクのSREにおけるAgentic AIへの挑戦/Our Journey with Agentic AI
taddy_919
1
420
AI が Approve する開発フロー / How AI Reviewers Accelerate Our Development
zaimy
1
220
AIエージェントで変わる開発プロセス ― レビューボトルネックからの脱却
lycorptech_jp
PRO
2
780
2026年のAIエージェント構築はどうなる?
minorun365
11
2.6k
Vertex AI Agent Engine で学ぶ「記憶」の設計
tkikuchi
0
110
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
400
The SEO identity crisis: Don't let AI make you average
varn
0
400
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
450
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
130
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
BBQ
matthewcrist
89
10k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
78
Marketing to machines
jonoalderson
1
5k
Transcript
名単体テスト 名単体テスト ~ 禁断の ~ 禁断の傀儡 傀儡 ~ ~ モ
ッ ク モ ッ ク 2025.5.14 シネマ de L T会@イオンシネマ シアタス調布 2025.5.14 シネマ de LT会@イオンシネマ シアタス調布 https:/ /aeon.connpass.com/event/352070/ https://aeon.connpass.com/event/352070/
俺の名前は岩本隆史 俺の名前は岩本隆史 ここ シアタス調布の常連さ ここ シアタス調布の常連さ
ENECHANGEって会社で ENECHANGEって会社で インフラを見てるのが表の顔 インフラを見てるのが表の顔
裏では Slackbotを開発してる 裏では Slackbotを開発してる 刑事じゃねえけど「 刑事じゃねえけど「Collmbo Collmbo」ってヤツさ 」ってヤツさ コ ロ
ン ボ コ ロ ン ボ
ある日 俺はAIエージェントに ある日 俺はAIエージェントに Collmboの単体テストを書かせてみた Collmboの単体テストを書かせてみた
だが 生成されたテストに だが 生成されたテストに 霧のような不安を覚えちまった 霧のような不安を覚えちまった
@patch("app.bolt_listeners.find_parent_message", return_value=None) @patch("app.bolt_listeners.is_this_app_mentioned") def test_is_child_message_and_mentioned_no_channel_id( mock_is_mentioned, mock_find_parent, mock_client, mock_context ):
mock_context.channel_id = None assert is_child_message_and_mentioned( mock_client, mock_context, "12345") is False mock_find_parent.assert_not_called() mock_is_mentioned.assert_not_called() ―― モックだらけじゃねえか ―― モックだらけじゃねえか こんなもん 受け入れていいのか? こんなもん 受け入れていいのか?
そんとき俺は ある本が そんとき俺は ある本が 棚に眠ってんのを思い出した 棚に眠ってんのを思い出した
None
読み進めて 俺は 読み進めて 俺は ようやく理解できた ようやく理解できた
「モックを単体テストで使うのは悪手」 「モックを単体テストで使うのは悪手」 ってことが ―― ってことが ――
モックって奴は モックって奴は 実装を知りすぎてんだ 実装を知りすぎてんだ
だから 実装を少し変えるだけで だから 実装を少し変えるだけで 簡単に壊れちまう 簡単に壊れちまう
実装を変えやすくするのが 実装を変えやすくするのが 単体テストの目的だってのによ 単体テストの目的だってのによ
bmi :: Float -> Float -> Float bmi weight height
= weight / height ^ 2 なら モックのいらない実装に変えりゃいい なら モックのいらない実装に変えりゃいい 理想は「副作用のない純粋関数」さ 理想は「副作用のない純粋関数」さ
def build_slack_user_prefixed_text(reply: dict, text: str) -> str: user_identifier = reply.get("user",
reply.get("username")) return f"<@{user_identifier}>: {text}" 光の見えた俺は Collmboに 光の見えた俺は Collmboに 純粋関数を増やしてった 純粋関数を増やしてった
@pytest.mark.parametrize( "reply, text, expected", [ ({"user": "U123"}, "hello", "<@U123>: hello"),
({"username": "someone"}, "hi", "<@someone>: hi"), ({}, "yo", "<@None>: yo"), ], ) def test_build_slack_user_prefixed_text(reply, text, expected): assert build_slack_user_prefixed_text(reply, text) == expected AIの書いたテストも 今なら AIの書いたテストも 今なら 自信を持って受け入れられるぜ 自信を持って受け入れられるぜ
もう俺は モックにゃ頼らねえ もう俺は モックにゃ頼らねえ あくまで単体テストでは ―― だけどな あくまで単体テストでは ―― だけどな
名単体テスト 名単体テスト ~ 禁断の ~ 禁断の傀儡 傀儡 ~ ~ モ
ッ ク モ ッ ク END END
速 報
名統合テスト 名統合テスト ~ 抗えぬ ~ 抗えぬ傀儡 傀儡 ~ ~ モ
ッ ク モ ッ ク 時期未定 時期未定