VS2005環境でのNAgile - MSTestのアサーション (^o^)

NAgiler2006-03-20


今日はMSTestのアサーションに対してユニットテストを書いてみた。MSTestはTDDにはきついかなと思っていたが、予想に反して十分にTDDできるというのが正直な感想。

でもやはりTestDriven.NETはインストールしておいた方がいいだろう。

いくつか興味深いAttributeも発見。

  • AssemblyInitializeAttribute
  • AssemblyCleanupAttribute
  • DataSourceAttribute
  • DeploymentItemAttribute
  • PriorityAttribute
  • TimeoutAttribute

特にDataSourceAttributeが興味深い。データドリブン ユニットテストについても調べてみるつもり。

MSTestのCollectionAssertは便利。使用方法はこんな感じ。

using System;
using System.Text;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections;

namespace MSTestStudy.Tests
{
 [TestClass]
 public class CollectionAssertTest
 {
  [TestMethod]
  public void コレクションの全ての要素の同型チェックが成功すべき()
  {
   ArrayList list = new ArrayList();
   list.Add(1);
   list.Add(2);
   CollectionAssert.AllItemsAreInstancesOfType(list, typeof(int));
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void コレクションの全ての要素の同型チェックが失敗すべき()
  {
   ArrayList list = new ArrayList();
   list.Add(1);
   list.Add("Test");
   CollectionAssert.AllItemsAreInstancesOfType(list, typeof(int));
  }

  [TestMethod]
  public void 要素がない場合はコレクションの全ての要素の同型チェックが成功すべき()
  {
   CollectionAssert.AllItemsAreInstancesOfType(new ArrayList(), typeof(int));
  }

  [TestMethod]
  public void コレクションの全ての要素の非nullチェックが成功すべき()
  {
   ArrayList list = new ArrayList();
   list.Add(1);
   list.Add(2);
   CollectionAssert.AllItemsAreNotNull(list);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void コレクションの全ての要素の非nullチェックが失敗すべき()
  {
   ArrayList list = new ArrayList();
   list.Add(null);
   CollectionAssert.AllItemsAreNotNull(list);
  }

  [TestMethod]
  public void 要素がない場合はコレクションの全ての要素の非nullチェックが成功すべき()
  {
   CollectionAssert.AllItemsAreNotNull(new ArrayList());
  }

  [TestMethod]
  public void コレクションの全ての要素の一意チェックが成功すべき()
  {
   ArrayList list = new ArrayList();
   list.Add(1);
   list.Add(2);
   CollectionAssert.AllItemsAreUnique(list);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void コレクションの全ての要素の一意チェックが失敗すべき()
  {
   ArrayList list = new ArrayList();
   list.Add(1);
   list.Add(1);
   CollectionAssert.AllItemsAreUnique(list);
  }

  [TestMethod]
  public void 要素がない場合はコレクションの全ての要素の一意チェックが成功すべき()
  {
   CollectionAssert.AllItemsAreUnique(new ArrayList());
  }

  [TestMethod]
  public void コレクションの同値チェックが成功すべき()
  {
   ArrayList expected = new ArrayList();
   expected.Add(1);
   expected.Add(2);
   ArrayList actual = new ArrayList();
   actual.Add(1);
   actual.Add(2);
   CollectionAssert.AreEqual(expected, actual);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void コレクションの同値チェックが失敗すべき()
  {
   ArrayList expected = new ArrayList();
   expected.Add(1);
   expected.Add(2);
   ArrayList actual = new ArrayList();
   actual.Add(2);
   actual.Add(1);
   CollectionAssert.AreEqual(expected, actual);
  }

  [TestMethod]
  public void 要素がない場合はコレクションの同値チェックが成功すべき()
  {
   CollectionAssert.AreEqual(new ArrayList(), new ArrayList());
  }

  [TestMethod]
  public void コレクションの異値チェックが成功すべき()
  {
   ArrayList expected = new ArrayList();
   expected.Add(1);
   expected.Add(2);
   ArrayList actual = new ArrayList();
   actual.Add(2);
   actual.Add(1);
   CollectionAssert.AreNotEqual(expected, actual);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void コレクションの異値チェックが失敗すべき()
  {
   ArrayList expected = new ArrayList();
   expected.Add(1);
   expected.Add(2);
   ArrayList actual = new ArrayList();
   actual.Add(1);
   actual.Add(2);
   CollectionAssert.AreNotEqual(expected, actual);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void 要素がない場合はコレクションの異値チェックが失敗すべき()
  {
   CollectionAssert.AreNotEqual(new ArrayList(), new ArrayList());
  }

  [TestMethod]
  public void コレクションに同じ要素が含まれているかのチェックが成功すべき()
  {
   ArrayList expected = new ArrayList();
   expected.Add(1);
   expected.Add(2);
   ArrayList actual = new ArrayList();
   actual.Add(2);
   actual.Add(1);
   CollectionAssert.AreEquivalent(expected, actual);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void コレクションに同じ要素が含まれているかのチェックが失敗すべき()
  {
   ArrayList expected = new ArrayList();
   expected.Add(1);
   expected.Add(2);
   ArrayList actual = new ArrayList();
   actual.Add(2);
   actual.Add(3);
   CollectionAssert.AreEquivalent(expected, actual);
  }

  [TestMethod]
  public void 要素がない場合はコレクションに同じ要素が含まれているかのチェックが成功すべき()
  {
   CollectionAssert.AreEquivalent(new ArrayList(), new ArrayList());
  }

  [TestMethod]
  public void コレクションに異なる要素が含まれているかのチェックが成功すべき()
  {
   ArrayList expected = new ArrayList();
   expected.Add(1);
   expected.Add(2);
   ArrayList actual = new ArrayList();
   actual.Add(2);
   actual.Add(3);
   CollectionAssert.AreNotEquivalent(expected, actual);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void コレクションに異なる要素が含まれているかのチェックが失敗すべき()
  {
   ArrayList expected = new ArrayList();
   expected.Add(1);
   expected.Add(2);
   ArrayList actual = new ArrayList();
   actual.Add(2);
   actual.Add(1);
   CollectionAssert.AreNotEquivalent(expected, actual);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void 要素がない場合はコレクションに異なる要素が含まれているかのチェックが失敗すべき()
  {
   CollectionAssert.AreNotEquivalent(new ArrayList(), new ArrayList());
  }

  [TestMethod]
  public void コレクションの要素有チェックが成功すべき()
  {
   ArrayList list = new ArrayList();
   list.Add(1);
   CollectionAssert.Contains(list, 1);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void コレクションの要素有チェックが失敗すべき()
  {
   ArrayList list = new ArrayList();
   list.Add(1);
   CollectionAssert.Contains(list, 2);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void 要素がない場合はコレクションの要素有チェックが失敗すべき()
  {
   CollectionAssert.Contains(new ArrayList(), 1);
  }

  [TestMethod]
  public void コレクションの要素無チェックが成功すべき()
  {
   ArrayList list = new ArrayList();
   list.Add(1);
   CollectionAssert.DoesNotContain(list, 2);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void コレクションの要素無チェックが失敗すべき()
  {
   ArrayList list = new ArrayList();
   list.Add(1);
   CollectionAssert.DoesNotContain(list, 1);
  }

  [TestMethod]
  public void 要素がない場合はコレクションの要素無チェックが成功すべき()
  {
   CollectionAssert.DoesNotContain(new ArrayList(), 1);
  }

  [TestMethod]
  public void コレクションが別のコレクションのサブセットかどうかのチェックが成功すべき()
  {
   ArrayList subset = new ArrayList();
   subset.Add(1);
   subset.Add(3);
   ArrayList superset = new ArrayList();
   superset.Add(1);
   superset.Add(2);
   superset.Add(3);
   CollectionAssert.IsSubsetOf(subset, superset);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void コレクションが別のコレクションのサブセットかどうかのチェックが失敗すべき()
  {
   ArrayList subset = new ArrayList();
   subset.Add(1);
   subset.Add(4);
   ArrayList superset = new ArrayList();
   superset.Add(1);
   superset.Add(2);
   superset.Add(3);
   CollectionAssert.IsSubsetOf(subset, superset);
  }

  [TestMethod]
  public void 要素がない場合はコレクションが別のコレクションのサブセットかどうかのチェックが成功すべき()
  {
   CollectionAssert.IsSubsetOf(new ArrayList(), new ArrayList());
  }

  [TestMethod]
  public void コレクションが別のコレクションのサブセットでないかどうかのチェックが成功すべき()
  {
   ArrayList subset = new ArrayList();
   subset.Add(1);
   subset.Add(4);
   ArrayList superset = new ArrayList();
   superset.Add(1);
   superset.Add(2);
   superset.Add(3);
   CollectionAssert.IsNotSubsetOf(subset, superset);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void コレクションが別のコレクションのサブセットでないかどうかのチェックが失敗すべき()
  {
   ArrayList subset = new ArrayList();
   subset.Add(1);
   subset.Add(3);
   ArrayList superset = new ArrayList();
   superset.Add(1);
   superset.Add(2);
   superset.Add(3);
   CollectionAssert.IsNotSubsetOf(subset, superset);
  }

  [TestMethod]
  [ExpectedException(typeof(AssertFailedException))]
  public void 要素がない場合はコレクションが別のコレクションのサブセットでないかどうかのチェックが失敗すべき()
  {
   CollectionAssert.IsNotSubsetOf(new ArrayList(), new ArrayList());
  }
 }
}