巨人の肩の上に登る

先人の積み重ねた発見に基づいて、なにかを発見しようとすることを指す。

Mac OSX(mono)でC#のユニットテストをする

f:id:mayo_yamasaki:20140908152016g:plain

C#ユニットテスト単体テスト)を書いてみた。
NUnitというフレームワークデファクトっぽいので、これのCUIでの使い方をメモ。

install

以前に書いた記事 monoとXamarin StudioでC# でXamarin Studioを入れていたので、恐らく、NUnit関連で必要なものは入っていると思います。
一応、$ which nunit-consolenunit-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で保存されます。


関連記事