在C#测试中有两个字符串[]和AreEqual的错误

gur*_*gui 3 c# unit-testing mstest

我有ac #test方法的问题.

看起来像:

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);
}
Run Code Online (Sandbox Code Playgroud)

测试的方法只做以下几点:

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

运行测试后,我收到以下错误:

Error in "Assert.AreEqual". Expected:<System.String[]>. Acutally:<System.String[]>.
Run Code Online (Sandbox Code Playgroud)

可以sombody告诉我那里有什么问题?

k.m*_*k.m 5

你得到异常的原因是Assert.AreEqual将使用默认比较器的类型,string[]如果是简单的参考比较(actual并且expected是不同的对象 - 不同的引用).

您可以使用集合断言:

CollectionAssert.AreEquivalent(expected, actual);
Run Code Online (Sandbox Code Playgroud)

或者,true使用LINQ 进行验证:

Assert.IsTrue(actual.SequenceEqual(expected));
Run Code Online (Sandbox Code Playgroud)