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
bUnitを救いたい@Fukuoka.NET #25
Search
Ryutaro Kimura
October 29, 2023
Technology
350
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
bUnitを救いたい@Fukuoka.NET #25
イベントページ:
https://fukuten.connpass.com/event/297072/
Ryutaro Kimura
October 29, 2023
More Decks by Ryutaro Kimura
See All by Ryutaro Kimura
Azureユーザー、AWSの話分かりたい@JAWS Festa 懇親会LT
ryutarokimura
0
120
可用性セットを検証してみた@GEEKERS NITE #3
ryutarokimura
0
430
Other Decks in Technology
See All in Technology
AIに丸投げしないトイル削減 / Eliminating Toil Without Leaving It All to AI
kohbis
3
640
Azure Cost Management の FOCUS コストデータを迷わず読むための“3つの軸”
tetsuyaooooo
0
150
プロダクトエンジニアに必要な「いい感じ」に作る能力 〜たくさん作れる時代に、どこまで作るかの決め方〜
jnishime_dresscode
2
1.4k
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
3
2.4k
DGX Sparkを2台使って いろいろ動かす話
sonoda_mj
1
130
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
620
データエンジニアの困りごとをDevinと一緒に解消する
10xinc
2
840
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
120
Tab5をRubyで動くパソコンにする
kishima
1
220
ブラウザアプリの継続的パフォーマンスモニタリング (序) / Continuous Browser Application Performance Monitoring; Act 1
moznion
0
110
Bet AI Day 2026丨How We Bet AI: AIとともに働く場をつくる
layerx
PRO
2
2.6k
KAEN Company Deck
kaen
PRO
0
320
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
528
40k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
770
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Faster Mobile Websites
deanohume
310
32k
Color Theory Basics | Prateek | Gurzu
gurzu
0
460
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
230
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.6k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
520
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
sira's awesome portfolio website redesign presentation
elsirapls
0
400
Deep Space Network (abreviated)
tonyrice
0
290
How to make the Groovebox
asonas
2
2.4k
Transcript
bUnitを救いたい ~BlazorのテストライブラリbUnitの紹介~ 木村 龍太郎 2023/10/26 Fukuoka.NET #25
2 自己紹介 ⚫ 木村龍太郎 (きむら りゅうたろう) ⚫ オルターブース 23卒 新入社員
⚫ jsakamotoさんと話すためにBlazor の 知識詰め込んだ ⚫ Blazor WASMの理解でお世話になりました ⚫ レンダリング方法がReactと違っておもろい @ryutaro_1019
bUnitってご存じですか
4 bUnitとは Razorコンポーネントの単体テストを実現するテストライブラリ ⚫ 公式の Microsoft テスト フレームワークではない。 ⚫ MSTest、NUnit、xUnit
などの汎用テスト フレームワークで動作する。 Counter.razor (Razorコンポーネント)の中身 【テストの例】 IncrementCount関数が実行されたとき 期待したUIに変わるかのテスト
今日話すこと
6 bUnitを救いたい ⚫ bUnitは記事がさみしい… ⚫ 上から四つ目で関係ない記事出るくらい(2023/10/26時点) ⚫ アルバイト時代の戦友(bUnit)を紹介したい ⚫ 半年くらいbUnit書いていた
今回の話を 通して bUnitの触りだけでも知ってもらい 知名度を上げる
7 基本的な書き方 @inherits TestContext @code { [Fact] public void CounterShouldIncrementWhenClicked()
{ // ①Arrange: Counter.razor コンポーネントをレンダリング var cut = Render(@<Counter />); // ②Act: テストしたいCSSセレクタ(クラス名もOK)を指定しクリック。 cut.Find("button").Click(); // ③Assert: アサートしたいCSSセレクタを指定しその内容を確認する。 cut.Find("p").MarkupMatches(@<p>Current count: 1</p>); } } ←テスト対象のコンポーネント(Counter.razor) bUnitのテストコード→
8 他にも書いたテストケース ⚫ ボタンを押したら画面遷移するテスト → “/” から “/user” へのルーティングのアサート ⚫
サインインしていたら〇〇させるテスト →セッションにサインイン状態をセットする → HTMLのアサート ⚫ 非同期処理のテスト →WaitForAssersion()で非同期処理の終了を待つ → HTMLのアサート くわしくは公式ドキュメントを!
9 漁った記事 ⚫ 基本はbUnitの公式ドキュメントを読む ⚫ 読み方 1. 左の目次からテストしたい処理を探す さっきの例だと[Verifying output]とか
2. コードと説明を読む ⚫ エラーの解決策はGithubのissue ⚫ bUnit作者のEgilさんが答えてくれてる (jsakamotoさんも待ってます) https://bunit.dev/docs/getting-started/index.html
10 まとめ ⚫ bUnitはRazorコンポーネントの単体テスト用ライブラリ ⚫ bUnitの学習は公式ドキュメントとの睨めっこ ⚫ Egilさんとjsakamotoさんを見習おう