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
320
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
410
Other Decks in Technology
See All in Technology
AIはどのように 組織のアジリティを変えるのか?
junki
4
1k
2026TECHFRESH畢業分享會 - Lightning Talk - 打造精準高效的 MCP 設計模式與測試實務
line_developers_tw
PRO
0
1.3k
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
【Snowflake Summit 2026 Recap!!】Snowflake Summit Deep Dive: Security & Governance
civitaspo
1
270
Claude Codeをどのように キャッチアップしているか
oikon48
13
8.6k
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.5k
マルチアカウント環境での コーディングエージェントを使った障害調査が大変なので AIエージェントにReadOnly権限を付与してみた / ReadOnly AI Agents for Multi-Account AWS Incident Response
yamaguchitk333
2
110
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
120
AIチャット検索改善の3週間
kworkdev
PRO
2
140
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
160
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
1.3k
200個のGitHubリポジトリを横断調査したかった
icck
0
140
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
160
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
200
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
350
From π to Pie charts
rasagy
0
210
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Typedesign – Prime Four
hannesfritz
42
3.1k
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さんを見習おう