mor*_*pdx 2 generics unit-testing 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 将按照您希望的方式工作,用于比较实际和预期的 Text 集合。