Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
名単体テスト 禁断の傀儡(モック)
Search
iwamot
PRO
May 14, 2025
Technology
790
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
名単体テスト 禁断の傀儡(モック)
2025-05-14
シネマ de LT会〜あなたのナレッジ大上映〜
https://aeon.connpass.com/event/352070/
iwamot
PRO
May 14, 2025
More Decks by iwamot
See All by iwamot
小さなエージェントから始めてみよう!実践コンテキストエンジニアリング
iwamot
PRO
0
74
サボる子はいねぇがー!AgentCoreハーネスの脆弱性に学ぶ、エージェントの入力バリデーション
iwamot
PRO
5
310
MCP Appsを作ってみよう
iwamot
PRO
4
870
自己紹介
iwamot
PRO
1
160
パワポ作るマンをMCP Apps化してみた
iwamot
PRO
0
1.2k
8万デプロイ
iwamot
PRO
2
480
AIエージェント・マイクロサービス時代。AWSでの手軽な構築法を考えて試してみた
iwamot
PRO
1
170
これがLambdaレス時代のChatOpsだ!実例で学ぶAmazon Q Developerカスタムアクション活用法
iwamot
PRO
10
3.2k
Developer Certificate of Origin、よさそう
iwamot
PRO
0
140
Other Decks in Technology
See All in Technology
AWS Quick 入門 | 目指せ Quick マスター 01
inariku
PRO
2
240
「いつか使う」の「いつか」は来ない 〜AI駆動開発における「作らない」判断について〜
ikki0006
0
170
プロダクションコードにおける encoding/json から encoding/json/v2 へのスムーズな移行
sansantech
PRO
1
210
In-Context Learning再入門。ICLの勾配降下的解釈の研究動向を追ってみる。
dai08srhg
1
750
セキュリティ専任チームなしで攻撃を先回りするSREが実践したSIEM on Amazon OpenSearch Service
cscengineer
PRO
0
700
HQ駆動開発で最高のAI-Contextを作ろう
sansantech
PRO
1
120
顧客合意を取りながら進めるAWSコスト削減の実践
optim
0
150
長い仕事を任せる (Workflows、クラウドセッション、Kiro Web) | 目指せ Kiro マスター 10
inariku
PRO
3
140
少ない人手 限られた予算 それでも守る 消せない・見つける・戻れる オールハザード型BCP on AWS / 20261107 Mitsutoshi Matsuo
shift_evolve
PRO
0
300
コードレビューをなくして見えたもの
henteko
0
140
公共システムAdventCalendar2026
toru_kubota
0
290
会社説明資料_最新版
demaecan
0
32k
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
330
Google's AI Overviews - The New Search
badams
0
1.7k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
890
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
60k
Side Projects
sachag
456
43k
The Invisible Side of Design
smashingmag
301
52k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Navigating Weather and Climate Data
rabernat
0
590
Building Flexible Design Systems
yeseniaperezcruz
330
41k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Become a Pro
speakerdeck
PRO
31
6.4k
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
速 報
名統合テスト 名統合テスト ~ 抗えぬ ~ 抗えぬ傀儡 傀儡 ~ ~ モ
ッ ク モ ッ ク 時期未定 時期未定