unit-testing - MSTest 单元测试 List<> 返回不起作用

标签 unit-testing generics mstest

我有一个非常简单的单元测试,正在测试通用 List<SelectListItem> 的正确生成。 .

    [TestMethod()]
public void PopulateSelectListWithSeperateTextAndValueLists()
{
    //Arrange
    SetupDisplayAndValueLists();
    bool allOption = false;

    //Act
    List<SelectListItem> result = ControllerHelpers.PopulateSelectList(valueList, displayList, allOption);

    //Assert
    Assert.AreEqual(expected, result);
}

即使我已经检查并确认两个对象具有相同的精确值,断言始终返回 false。

当单元测试返回泛型结果时,有什么特殊注意事项吗?

更新了新测试及其状态

Assert.AreEqual(4, result.Count); //passes

Assert.AreEqual(result[0].Text, expected[0].Text, "0 element is not found");//passes
Assert.AreEqual(result[1].Text, expected[1].Text, "1 element is not found");//passes
Assert.AreEqual(result[2].Text, expected[2].Text, "2 element is not found");//passes
Assert.AreEqual(result[3].Text, expected[3].Text, "3 element is not found");//passes

Assert.AreEqual(result[0].Value, expected[0].Value, "0 element is not found");//passes
Assert.AreEqual(result[1].Value, expected[1].Value, "1 element is not found");//passes
Assert.AreEqual(result[2].Value, expected[2].Value, "2 element is not found");//passes
Assert.AreEqual(result[3].Value, expected[3].Value, "3 element is not found");//passes

Assert.IsTrue(result.Contains(expected[0]), "0 element is not found"); //doesn't pass
Assert.IsTrue(result.Contains(expected[1]), "1 element is not found"); //doesn't pass
Assert.IsTrue(result.Contains(expected[2]), "2 element is not found"); //doesn't pass
Assert.IsTrue(result.Contains(expected[3]), "3 element is not found"); //doesn't pass

Assert.AreEqual(expectedList, result); //doesn't pass

最佳答案

使用CollectionAssert类而不是 Assert 类。您可以选择验证项目是否处于相同的顺序,或者只是验证它们总体上具有相同的项目。

不过,如果集合中的项目是引用类型而不是值类型,则它可能不会按照您想要的方式比较它们。 (虽然字符串可以正常工作)

更新:由于您正在比较这些项目的 .Text 属性,因此您可以尝试使用 LINQ 将 Text 属性作为集合返回。然后,CollectionAssert 将完全按照您想要的方式工作,以比较实际的文本集合和预期的文本集合。

关于unit-testing - MSTest 单元测试 List<> 返回不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5266674/

相关文章:

java - 通用代码中的困惑

teamcity - 在 TeamCity 7 中为 MSTest 运行程序指定测试程序集时了解通配符

C# 重复公共(public)代码的单元测试

javascript - 如何将 Jasmine 单元测试结果作为字符串返回?

sql - 我应该如何对此进行单元测试

java - 为什么这个 EasyMock 测试失败?

java - Lambda 泛型类型界限

c# - 如何使用 C# 泛型比较类型?

c# - 如何在每节课后运行 ClassCleanup (MSTest)?

ios - 在使用 Cocoapods 的项目中执行单元测试时出现 "Class X is implemented in both"