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告诉我那里有什么问题?
你得到异常的原因是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)