#19 C#で学ぶテスト(単体テスト)の基本
C#でクラスやメソッドを書いた後、それが正しく動くかをConsole.WriteLineで確認するだけで済ませていませんか?この記事では、C#で書いたコードを自動でチェックする「テスト」の基本を解説します。
なぜテストを書くのか
コードを修正するたびに、関連するメソッドが壊れていないかを手作業で確認するのは大変です。テストを用意しておけば、コマンド一つで動作確認ができ、安心してコードを直せるようになります。
xUnitを使ったテストの書き方
C#ではxUnitというテスト用ライブラリがよく使われます。.NET CLIでdotnet new xunitとするとテスト用プロジェクトが作られます。
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
using Xunit;
public class CalculatorTests
{
[Fact]
public void TestAdd()
{
var calc = new Calculator();
Assert.Equal(5, calc.Add(2, 3));
}
}
メソッドの上に[Fact]という目印(属性)を付けるだけでテストとして認識されます。Assert.Equal(期待値, 実際の値)という順番で書きます。ターミナルでdotnet testを実行すると結果が一覧表示されます。
複数パターンをまとめてテストする
[Theory]という目印を使うと、複数の入力パターンをまとめてテストできます。
[Theory]
[InlineData(2, 3, 5)]
[InlineData(0, 0, 0)]
[InlineData(-1, 1, 0)]
public void TestAddCases(int a, int b, int expected)
{
var calc = new Calculator();
Assert.Equal(expected, calc.Add(a, b));
}
C#ならではの注意点
C#はnull許容参照型という仕組みがあり、意図せずnullが渡された場合の挙動もテストしておくと安心です。Assert.Throws<ArgumentNullException>のように「例外が発生するはず」を確認する書き方も用意されているので、異常系のテストにも活用しましょう。
まとめ
テストは「正しく動くことを保証する仕組み」であり、安心してコードを修正するための土台になります。[Fact]とAssert.Equalから始めて、[Theory]を使った複数パターンのテストにも挑戦してみてください。
関連記事
本ページはプロモーションを含みます。
参考書籍(PR)
C#をもっと学びたい方には「確かな力が身につくC#「超」入門 第2版」がおすすめです。
コメント
コメントを投稿