none
Assert.AreEqualでプリミティブ型の配列のチェックが出来ない??あれ? RRS feed

  • 質問

  • Assert.AreEqualでプリミティブ型の配列のチェックが出来ない??あれ?

    Web APIのテストコードを書いていますが、配列のチェックが出来ずに困っています。
    発生するエラーは、矛盾しており、Assertクラスでは配列のエラーチェックができないのでは?と思っています。

    ▼発生したエラー

    Assert.AreEqual に失敗しました。<System.String[]> が必要ですが、<System.String[]> が指定されました。

    Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException はユーザー コードによってハンドルされませんでした。
      HResult=-2146233088
      Message=Assert.AreEqual に失敗しました。<System.String[]> が必要ですが、<System.String[]> が指定されました。
      Source=Microsoft.VisualStudio.QualityTools.UnitTestFramework
      StackTrace:
           場所 Microsoft.VisualStudio.TestTools.UnitTesting.Assert.HandleFail(String assertionName, String message, Object[] parameters)
           場所 Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual[T](T expected, T actual, String message, Object[] parameters)
           場所 Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual[T](T expected, T actual)
           場所 WebApplication.Tests.Controllers.ApiBeginControllerTest.GET() 場所 d:\dev\sample\20141119_WebMVC\20141128_WebApplication\WebApplication.Tests\Controllers\ApiBeginControllerTest.cs:行 33
      InnerException:

    ▼使用しているコード

     Web API(ApiControllerのメソッド)

      // GET api/ApiBegin
      public IEnumerable<string> Get()
      {
       return new string[] { "value1", "value2" };
      }

     テストクラス

      [TestMethod]
      public void GET()
      {
       //List<string> expected = new List<string> { "value1", "value2" };
       //var expected = new String[] { "value1","value2"};

       IEnumerable<string> expected = new String[] { "value1", "value2" };

       ApiBeginController controller = new ApiBeginController();

       //string[] ret = controller.Get() as string[];
       IEnumerable<string> ret = controller.Get() as IEnumerable<string>;

       Assert.AreEqual(expected, ret);

       //Assert.AreEqual(expected, new string[] { "value1", "value2" });

       

       //Assert.AreEqual(expected, expected);   //成功
       //Assert.AreEqual(ret, ret);      //成功
      }

    ▼参考
    http://www.atmarkit.co.jp/fdotnet/tools/nunit22_01/nunit22_01_03.html

    Assertは、1テストメソッドで一回にしたいと考えています。



    2014年12月10日 0:43

回答

  • すみません。解決しました。

    ⇒CollectionAssertがあるのですね。。。。勉強不足でした。

    [TestMethod]

    public void GET()

    {

    var expected = new String[] { "value1","value2"};

    ApiBeginController controller = new ApiBeginController();

    string[] ret = controller.Get() as string[];

    CollectionAssert.AreEqual(expected, ret);

    }

    • 回答としてマーク kiyo7447R2 2014年12月10日 0:51
    2014年12月10日 0:50