xUnit/MSTestのセットアップとアサーション
テストの基本形(Arrange-Act-Assert)を学び、アサーションがテストを失敗させる仕組みを確認し、その考え方をMSTest/xUnitの属性に対応付けます。
「xUnit/MSTestのセットアップとアサーション」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。
単体テストとは
目標: 小さく、繰り返し実行できる単体テストを書きます。
- 分離したテストプロジェクトで MSTest または xUnit を使用します
- 各テストで1つの動作を確認します
- わかりやすい名前とアサーションを使用します
AAA パターン
テストは Arrange → Act → Assert に従います。ここでは、単純なチェックでアサーションをシミュレートします。
using System;
public static class MathUtil
{
// Method under test
public static int Add(int a, int b)
{
return a + b;
}
}
public class Program
{
public static void Main(string[] args)
{
// Arrange
int a = 2;
int b = 3;
int expected = 5;
// Act
int actual = MathUtil.Add(a, b);
// Assert (manual check for this console demo)
if (actual == expected)
Console.WriteLine("PASS: Add returned " + actual);
else
Console.WriteLine("FAIL: expected " + expected + " but got " + actual);
}
}
アサーションの動作
アサーションは不一致があると例外をスローします。実際のフレームワークも同様に動作します(より豊富な API と、より優れたレポート機能を備えています)。
using System;
public static class Assert
{
public static void AreEqual(int expected, int actual)
{
if (expected != actual)
throw new Exception("AreEqual failed: expected " + expected + ", actual " + actual);
}
public static void IsTrue(bool condition, string message)
{
if (!condition) throw new Exception("IsTrue failed: " + message);
}
}
public static class MathUtil
{
public static int Mul(int a, int b) { return a * b; }
}
public class Program
{
public static void Main(string[] args)
{
try
{
int r = MathUtil.Mul(2, 4);
Assert.AreEqual(8, r); // pass
Assert.IsTrue(r % 2 == 0, "even"); // pass
Console.WriteLine("All assertions passed.");
}
catch (Exception ex)
{
Console.WriteLine("TEST FAILED: " + ex.Message);
}
}
}
テストが成功する例
各テストで1つの動作を確認します。実際の MSTest/xUnit では、失敗する Assert によってテストが失敗として表示されます。
using System;
public static class StringUtil
{
public static string Repeat(string s, int n)
{
if (n < 0) throw new ArgumentOutOfRangeException("n");
string r = "";
for (int i = 0; i < n; i++) r += s;
return r;
}
}
public static class Assert
{
public static void AreEqual(string expected, string actual)
{
if (expected != actual)
throw new Exception("AreEqual failed: expected [" + expected + "], actual [" + actual + "]");
}
}
public class Program
{
static void TestRepeat_Happy()
{
string got = StringUtil.Repeat("ab", 3);
Assert.AreEqual("ababab", got); // pass
}
static void TestRepeat_EmptyTimesZero()
{
string got = StringUtil.Repeat("x", 0);
Assert.AreEqual("", got); // pass
}
public static void Main(string[] args)
{
try { TestRepeat_Happy(); Console.WriteLine("PASS: Happy"); } catch (Exception ex) { Console.WriteLine("FAIL: Happy -> " + ex.Message); }
try { TestRepeat_EmptyTimesZero(); Console.WriteLine("PASS: Zero"); } catch (Exception ex) { Console.WriteLine("FAIL: Zero -> " + ex.Message); }
}
}
MSTest と xUnit の対応
MSTest の基本:
- クラスに [TestClass] を付けます
- 各テストに [TestMethod] を付けます
- Assert.AreEqual/IsTrue/AreNotEqual…
xUnit の基本:
- テストメソッドには [Fact] を使用します
- Assert.Equal/True/False…
- テストクラスの属性は必要ありません
名前付けとスコープのヒント
ヒント:
- Method_Scenario_ExpectedResult のようにテストに名前を付けます
- テストごとに1つのアサーション、または1つの動作にします
- テストは小さく、独立した状態に保ちます
アサーションによる失敗
まとめ
まとめ: AAA パターンを使用し、アサーションで期待値と実際の値を比較して、MSTest([TestMethod])または xUnit([Fact])に対応させます。
よくある質問
「xUnit/MSTestのセットアップとアサーション」レッスンは無料ですか?
はい。「xUnit/MSTestのセットアップとアサーション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。
「xUnit/MSTestのセットアップとアサーション」で何を学びますか?
テストの基本形(Arrange-Act-Assert)を学び、アサーションがテストを失敗させる仕組みを確認し、その考え方をMSTest/xUnitの属性に対応付けます。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。
「xUnit/MSTestのセットアップとアサーション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- xUnit/MSTestのセットアップとアサーション
- インターフェースによるFakeとテストデータビルダー
- 失敗するテストのデバッグ