3

ac#テスト方法に問題があります。

次のようになります。

public void GetRolesTest()
{
    RoleProvider target = new RoleProvider(); 
    string username = "FOO"; 
    string[] expected = new string[2];
    expected[0] = "Admin";
    expected[1] = "User";
    string[] actual;
    actual = target.GetRoles(username);
    Assert.AreEqual<string[]>(expected, actual);
}

テストされるメソッドは、次のようになります。

public override string[] GetRoles(string username)
{
    string[] output = new string[2];
    output[0] = "Admin";
    output[1] = "User";
    return output;
}

テストを実行した後、次のエラーが発生します。

Error in "Assert.AreEqual". Expected:<System.String[]>. Acutally:<System.String[]>.

誰かがそこで何が悪いのか教えてもらえますか?

4

2 に答える 2

5

例外が発生した理由はAssert.AreEqual、タイプにデフォルトの比較子を使用するためです。これは、単純な参照比較の場合です(string[]異なるオブジェクト-異なる参照)。actualexpected

代わりにコレクションアサーションを使用できます。

CollectionAssert.AreEquivalent(expected, actual);

または、trueLINQで検証を行う:

Assert.IsTrue(actual.SequenceEqual(expected));
于 2012-06-12T07:47:35.200 に答える
2

ここでテストしているのは、actualexpectedが同じ配列インスタンスであるかどうかですが、そうではありません。次のように、配列の内容を明示的にテストすることをお勧めします。

Assert.Contains( "Admin", actual );
Assert.Contains( "User", actual );
Assert.Equals( 2, actual.Length );

ユニットテストライブラリに応じて、コードは少し異なるように見えるかもしれませんが、私が得ているものをご覧いただければ幸いです。

于 2012-06-12T07:27:22.727 に答える