連載:VSTSの単体テスト機能は本当に使えるのか?

第2回 アジャイル開発者から見たVSTSテスト機能

太陽システム株式会社 中西 庸文
Microsoft MVP 2006 - Solutions Architect)
2006/09/20

6. コレクション比較を行うためのアサーション

 最後に、コレクション比較を行うためのアサーションの使い方を見てみよう。

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

namespace MSTestStudy.Tests
{
  [TestClass]
  public class CollectionAssertTest
  {
    [TestMethod]
    public void コレクションのすべての要素の同型チェックが成功すべき()
    {
      List<int> list = new List<int>();
      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 List<int>(), typeof(int));
    }

    [TestMethod]
    public void コレクションのすべての要素の非nullチェックが成功すべき()
    {
      List<int> list = new List<int>();
      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 List<int>());
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    [TestMethod]
    [ExpectedException(typeof(AssertFailedException))]
    public void 要素がない場合はコレクションが別のコレクションのサブセットでないかどうかのチェックが失敗すべき()
    {
       CollectionAssert.IsNotSubsetOf(new List<int>(), new List<int>());
    }
  }
}
コレクション比較のアサーションの使い方を学習するために記述したテスト・コード

 このようにVSTSのテスティング・フレームワークにはコレクションを比較するためのアサーションを数多く持つCollectionAssertクラスが用意されているが、NUnitにはコレクションを比較するためのクラスは存在しない。

 ただし、次期バージョンであるNUnit 2.4のBeta 1 ReleaseではVSTSのテスティング・フレームワークと同等のCollectionAssertクラスや、ファイルを比較するためのFileAssertクラスなども用意されているようだ。

 ここで少し補足しておくと、NUnitのAssertクラスには大小比較のためのアサーションを行うGreaterメソッドとLessメソッドや、ユーティリティ・メソッドとしてテスト・メソッド中でそれ以降の行の実行をスキップさせるIgnoreメソッドなども用意されているが、VSTSのテスティング・フレームワークにはこれらと同等のものは存在しない。


 INDEX
  VSTSの単体テスト機能は本当に使えるのか?
  第2回 アジャイル開発者から見たVSTSテスト機能
    1.VSTSにおけるアジャイル開発の実践
    2.VSTSの単体テストとNUnitとの比較(1)
    3.VSTSの単体テストとNUnitとの比較(2)
  4.VSTSの単体テストとNUnitとの比較(3)
    5.NUnitからVSTSのテスティング・フレームワークへの移行
 
インデックス・ページヘ  「VSTSの単体テスト機能は本当に使えるのか?」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間