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
bUnitを救いたい@Fukuoka.NET #25
Search
Ryutaro Kimura
October 29, 2023
Technology
380
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
130
可用性セットを検証してみた@GEEKERS NITE #3
ryutarokimura
0
440
Other Decks in Technology
See All in Technology
Rustuna: Rustによる高速なOptuna実装
pfn
PRO
0
190
会社説明資料
persolserverworks
0
9.8k
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
150
How to Design Configuration for Rails Applications
willnet
1
780
Rust で関数型ドメインモデリング
takonda
0
140
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
860
Classmethod Company Deck
satoshi7
1
680
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
WasmをRustにする
sansantech
PRO
0
250
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
570
分析の民主化を支えるメタデータ整備の実践
kakehashi
PRO
4
1.4k
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
1
180
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
400
Fireside Chat
paigeccino
43
4.1k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
500
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
HDC tutorial
michielstock
2
960
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
560
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
530
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
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さんを見習おう