2014年12月10日水曜日

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

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); //成功
}


⇒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);

}

0 件のコメント:

コメントを投稿