Mac OSX(mono)でC#のユニットテストをする
C#でユニットテスト(単体テスト)を書いてみた。
NUnitというフレームワークがデファクトっぽいので、これのCUIでの使い方をメモ。
install
以前に書いた記事 monoとXamarin StudioでC# でXamarin Studioを入れていたので、恐らく、NUnit関連で必要なものは入っていると思います。
一応、$ which nunit-console
でnunit-consoleのパスが通ってるか確認。
Sample
準備が整ったので、早速試してみましょう。
HelloTest.cs
を下記の内容で作成。
using NUnit.Framework; using System; namespace HelloTest { [TestFixture] public class NUnitTestClass { [Test] public void TestCase1 () { Assert.AreEqual (2, 1 + 1); } [Test] public void TestCase2 () { Assert.AreEqual (2, 2 - 1); } } }
分かり易く、失敗するケースで試してみます。
TestCase2の方は明らかに誤りなので、コケるはずです。
NUnit.Frameworkの詳細に関しては、公式のドキュメントを参照されたい。
Test
手順としては、テストコードをライブラリ形式にコンパイルしてから、nunit-consoleで実行します。
コンパイル
$ mcs HelloTest.cs -reference:nunit.framework.dll -target:library
実行
$ nunit-console HelloTest.dll
結果
NUnit version 2.4.8 Copyright (C) 2002-2007 Charlie Poole. Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov. Copyright (C) 2000-2002 Philip Craig. All Rights Reserved. Runtime Environment - OS Version: Unix 13.3.0.0 CLR Version: 2.0.50727.1433 ( 3.8.0 ((no/45d0ba1 Tue Aug 26 20:33:43 EDT 2014) ) ..F Tests run: 2, Failures: 1, Not run: 0, Time: 0.107 seconds Test Case Failures: 1) HelloTest.NUnitTestClass.TestCase2 : Expected: 2 But was: 1 ...
上記の出力結果から、問題の箇所でコケていることがわかります。
ちなみに、テスト結果はxmlで保存されます。