Blazorアプリの単体テスト|ASP.NET×Blazor入門 12.1
12.1 単体テスト(xUnit + bUnit)
開発したアプリケーションが正しく動作しているかを確かめるうえで、単体テスト(Unit Test)は欠かせません。 特にBlazorのようにUIロジックをコンポーネント単位で構築する開発スタイルにおいては、 各コンポーネントやサービスが期待通りに動くかどうかを検証する仕組みが、保守性や信頼性を大きく左右します。
xUnit:ロジック層のテストに最適
Blazorアプリでは、ビジネスロジックやデータアクセスの層をC#クラスとして切り出していることが多く、 これらのテストには xUnit を使うのが一般的です。 xUnitは.NET標準のテストフレームワークの一つで、Visual Studioでも高い互換性があります。
// Calculator.cs
public class Calculator {
public int Add(int a, int b) => a + b;
}
// CalculatorTests.cs
public class CalculatorTests {
[Fact]
public void Add_正しい加算結果を返す() {
var calc = new Calculator();
Assert.Equal(5, calc.Add(2, 3));
}
}
上記のように、シンプルな関数を小さく区切ってテストできるようにすることが、堅牢なコード設計につながります。
bUnit:Blazorコンポーネントを直接テストする
Blazorの魅力は、UIをC#で定義しながらも、柔軟な状態管理とユーザー操作に対応できることです。 そのUIコンポーネント自体をテストしたいときに使えるのが bUnit です。 bUnitは、Blazorコンポーネントを仮想DOMでレンダリングして、表示内容や状態を検証できる強力なツールです。
// Counter.razor
Count: @count
@code {
int count = 0;
void Increment() => count++;
}
// CounterTest.cs
public class CounterTest : TestContext {
[Fact]
public void 初期状態は0() {
var cut = RenderComponent<Counter>();
cut.MarkupMatches("<h3>Count: 0</h3><button>+1</button>");
}
[Fact]
public void ボタンをクリックすると1増える() {
var cut = RenderComponent<Counter>();
cut.Find("button").Click();
cut.Find("h3").MarkupMatches("<h3>Count: 1</h3>");
}
}
テストコードが直感的でありながら、UIの状態遷移まで検証できる点がbUnitの強みです。 CI/CDとの連携や回帰テストにも向いており、Blazor開発においては必須といえるでしょう。
まとめ
・ロジック層は xUnit で堅牢に
・UIコンポーネントは bUnit でリアルに
という分担を意識することで、アプリケーション全体の信頼性を高めるテスト戦略が実現できます。
次のセクションでは、このようにして信頼性を確保したアプリケーションを、いよいよAzureへとデプロイしていきます。
2025-05-22
下田 昌平
開発に関するインプットをアウトプットしています。Categories
Search Logs
Blazor JSON表示 284
HTMLとC 279
Blazor 自動化 272
Blazor テスト 268
Blazor API連携 267
Blazor 運用 267
Blazor リスト表示 264
Blazor 初期処理 264
API呼び出し Blazor 263
Blazor エラー処理 263
Blazor データ取得 263
Blazor サーバー通信 262
Blazor 非同期処理 260
Blazor コンポーネント初期化 259
使い分け 259
.NET HttpClient 使い方 258
フォーム入力 258
Blazor 非同期通信 257
HttpClient 使い方 257
Razor入門 257
入門 254
bUnit使い方 247
Blazor入門 245
依存性注入 243
HttpClient 例外処理 238
UI操作 237
Python入門 232
フォルダ構成 225
AIとPython 220
Pythonとは 213