在 C# 测试中使用两个字符串 [] 和 AreEqual 的错误
本文关键字:字符串 两个 错误 AreEqual 测试 | 更新日期: 2023-09-27 18:37:02
我对 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[]>.
索姆博德能告诉我那里出了什么问题吗?
您获得异常的原因是Assert.AreEqual
将使用默认比较器的类型,在这种情况下string[]
将是简单的引用比较(actual
和expected
是不同的对象 - 不同的引用)。
可以改用集合断言:
CollectionAssert.AreEquivalent(expected, actual);
或者,使用 LINQ 执行true
验证:
Assert.IsTrue(actual.SequenceEqual(expected));
您在这里测试的是actual
和expected
是否是同一个数组实例,但事实并非如此。我建议显式测试数组内容,如下所示:
Assert.Contains( "Admin", actual );
Assert.Contains( "User", actual );
Assert.Equals( 2, actual.Length );
根据您的单元测试 lib,代码可能看起来略有不同,但我希望您了解我的意思。