我的c#测试方法有问题。
看起来像:
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[]>.
可以告诉我那里有什么问题吗?
答案 0 :(得分:5)
您获得例外的原因是Assert.AreEqual
将使用默认比较器作为类型,如果string[]
是简单参考比较(actual
和expected
不同对象 - 不同的引用。)
您可以改为使用集合断言:
CollectionAssert.AreEquivalent(expected, actual);
或者,使用LINQ进行true
验证:
Assert.IsTrue(actual.SequenceEqual(expected));
答案 1 :(得分:2)
您在此处测试的是actual
和expected
是否是相同的数组实例,而实际情况并非如此。我建议明确地测试数组内容,如下所示:
Assert.Contains( "Admin", actual );
Assert.Contains( "User", actual );
Assert.Equals( 2, actual.Length );
根据您的单元测试库,代码可能会略有不同,但我希望您能看到我的目标。