« [ブログ紹介] Writing Unit Tests in F# | トップページ | [記事紹介] CodeZine ~ C#で始めるテスト駆動開発 »

2011年11月21日 (月)

[NEWS] NUnit 2.6.0 beta2 リリース

11月 20日付けで、 NUnit Version 2.6.0.11324 (beta2) が公開されました。

リリースノート ⇒ NUnit.org : Release Notes (英文)
ダウンロード ⇒ Launchpad : NUnit V2 2.6.0b2

beta1(2011/8)のときに比べると、 けっこう盛り沢山の機能追加があります。
便利そうな新機能をいくつかピックアップしておきます。

20111121_nunit260b2

  • TestCase 属性に、(名前付き引数として) Explicit 「属性」を指定できる。
  • Assert.That で比較するときに、型引数を指定可能。(Assert.That<int> など)
  • Assert.Throwsn が失敗したとき、例外のメッセージとスタックトレースが出力されるようになった。
  • Assert.That でコレクションを比較するとき、Exactly() モディファイアーが指定可能。これは、条件に合致する要素が何個あるか検査するもの。
  • Assert.That でコレクションを比較するとき、要素の比較方法を指定する Using() モディファイアーを複数指定することが可能になった。
  • TestContext のドキュメント。 (実装自体は 2.5.7 から存在していた。)

以上を試してみたコードを掲載しておきます。

using System;
using NUnit.Framework;

//2.6.0b2 Release notes  https://launchpad.net/nunitv2/2.6/2.6.0b2

namespace NUnit260b2Test {
    [TestFixture]
    public class NUnitTest {

        //* TestCaseAttribute now accepts Explicit and Reason named parameters.
        [TestCase(1, 2, 3, Explicit = false, Reason="普通に実行される")]
        [TestCase(-1, 1, 1, Explicit = true, Reason = "明示的に選択して[Run]しないと、実行されない")]
        public void TestCaseAttributeTest(int a, int b, int expected) {
            int result = a + b;

            //* EqualConstraint now recognizes and uses IEquatable<T>
            Assert.That<int>(ref result, Is.EqualTo(expected));
        }

        [Test()]
        public void AssertThrowsTest() {
             //* When Assert.Throws() fails due to an exception of the wrong Type being thrown,
            // the error message now includes the Message and Stack Trace from the exception.

            int n = 0;
            Assert.Throws<ArgumentNullException>(() => n = 1 / n);
        }
        //RED のときは、例外のメッセージとスタックトレースが次のように出る。
        //NUnit260b2Test.NUnitTest.AssertThrowsTest:
        //  Expected: <System.ArgumentNullException>
        //  But was:  <System.DivideByZeroException> (0 で除算しようとしました。)
        //   場所 NUnit260b2Test.NUnitTest.<>c__DisplayClass1.<AssertThrowsTest>b__0()
        //場所 D:\$projects\NUnitTests\NUnit260b2Test\NUnit260b2Test\NUnitTest.cs:行 25
        //   場所 NUnit.Framework.Assert.Throws(IResolveConstraint expression, TestDelegate
        //code, String message, Object[] args)


        [Test()]
        public void HasExactlyTest() {
            int[] array = new int[] { 10, 20, 30, 10 };

            //* The constraint syntax now supports Has.Exactly(n)
            Assert.That(array, Has.Exactly(2).EqualTo(10));                //10に等しい要素は2個
            Assert.That(array, Has.Exactly(1).GreaterThan(20));            //20より大きい要素は1個(30)
            Assert.That(array, Has.Exactly(3).InRange<int>(10, 20));    //10と20の間の要素は3個(10,20,10)
            Assert.That(array, Has.Exactly(1).Matches<int>(n => n % 3 == 0));    //3の倍数は1個(30)
        }

        [Test()]
        public void MultiUsingTest() {
            object[] arr1 = new object[] { 11, 23, "abc"};
            object[] arr2 = new object[] { 51, 13, "XYZ" };
       
            //普通に比較すれば、arr1とarr2は等しくない
            Assert.That(arr2, Is.Not.EqualTo(arr1));

            Comparison<int> intComparison = (x, y) => ((x % 10) - (y % 10));    //int は1の位だけで比較
            Comparison<string> stringComparison = (x, y) => (x.Length - y.Length);    //stringは文字列長だけで比較

            //* The Using(...) syntactic element may now be repeated multiple times in an expression
            Assert.That(arr2, Is.EqualTo(arr1).Using<int>(intComparison).Using<string>(stringComparison));
            // int の比較には intComparison が使われ、string の比較には stringComparison が使用される。
        }

        [TearDown()]
        public void TearDown() {
            //* Documentation is provided for the previously undocumented TestContext.
            //http://www.nunit.org/index.php?p=testContext&r=2.6

            TestContext tc = TestContext.CurrentContext;
            Console.WriteLine("TEST NAME: {0}", tc.Test.Name);
            Console.WriteLine("TestDirectory is \"{0}\"", tc.TestDirectory);
            Console.WriteLine("WorkDirectory is \"{0}\"", tc.WorkDirectory);
            Console.WriteLine("Status is {0}", tc.Result.Status);
            Console.WriteLine("State is {0}", tc.Result.State);
        }
    }
}

※ TearDown での TestContext 表示例

TEST NAME: TestCaseAttributeTest(1,2,3)
TestDirectory is "D:\$projects\NUnitTests\NUnit260b2Test\NUnit260b2Test\bin\Debug"
WorkDirectory is "C:\Program Files (x86)\NUnit 2.6\bin"
Status is Passed
State is Success

|

« [ブログ紹介] Writing Unit Tests in F# | トップページ | [記事紹介] CodeZine ~ C#で始めるテスト駆動開発 »

ニュース」カテゴリの記事

<NUnit>」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: [NEWS] NUnit 2.6.0 beta2 リリース:

« [ブログ紹介] Writing Unit Tests in F# | トップページ | [記事紹介] CodeZine ~ C#で始めるテスト駆動開発 »