在 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[]>.

索姆博德能告诉我那里出了什么问题吗?

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

您获得异常的原因是Assert.AreEqual将使用默认比较器的类型,在这种情况下string[]将是简单的引用比较(actualexpected是不同的对象 - 不同的引用)。

可以改用集合断言:

CollectionAssert.AreEquivalent(expected, actual);

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

Assert.IsTrue(actual.SequenceEqual(expected));

您在这里测试的是actualexpected是否是同一个数组实例,但事实并非如此。我建议显式测试数组内容,如下所示:

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

根据您的单元测试 lib,代码可能看起来略有不同,但我希望您了解我的意思。