NUnitを使ってみるテスト
WindowsPhoneはおろか、今までxUnitは使用したことがありませんでしたが、
開発効率を上げるためにも自動テスト(ユニットテスト?)とやらを勉強しようと思い、
ひとまずWindowsPhoneでNUnitを使ってみました。
使い方
テスト対象の用意
まずは、適当にテスト対象のアプリを作ります。
で、適当にテスト対象のクラスを作ります。
public class Tax { /// <summary> /// 消費税込の価格を返す /// </summary> /// <param name="price">税抜き価格</param> /// <returns>税込み価格</returns> public int AddExciseTax(int price) { return (int)(price * 1.05); } }
テストアプリを追加
次に、テスト用のアプリプロジェクトを追加します。
このプロジェクトに対して、NuGetでNUnitをインストールします。
・・・何をどうしていいか分からないので、まずはNUnit_Readme.txtを読んでみます。
Readmeによると、
UnitTest.cs と Test_Readme.txt はいらないから消していいよ。
例は NUnitTest.cs に書いてあるから。あと、MainPageのLoadedイベントのハンドラに
this.StartTestRunner(new Microsoft.Silverlight.Testing.UnitTesting.Metadata.NUnit.NUnitProvider());
って書いとけばおk
とのことなので、要らないファイルを消して、MainPageのLoadedに上記コードを記述します。
namespace TestApp { public partial class MainPage : PhoneApplicationPage { // コンストラクター public MainPage() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainPage_Loaded); } void MainPage_Loaded(object sender, RoutedEventArgs e) { this.StartTestRunner(new Microsoft.Silverlight.Testing.UnitTesting.Metadata.NUnit.NUnitProvider()); } } }
次に、Tax.cs のテストをするために、TestAppプロジェクトの参照にTargetAppを追加します。
そんで、NUnitTest.csのテストコードを書き換えます。
namespace TestApp { [TestFixture] public class NUnitTest { [Test] public void TaxTestPass() { Assert.AreEqual(105, TargetApp.Tax.AddExciseTax(100)); } [Test] public void TaxTestFail() { Assert.AreEqual(100, TargetApp.Tax.AddExciseTax(100)); } } }
この例では、100円の税込み価格が105円になるかチェックするテスト(成功例)と、
価格が変わらないテスト(失敗例)を記述しています。