public void NumericListCanBeSorted()
{
var sorted = sort.SortNumbers(nums);
Assert.AreEqual(sorted, nums);
}
public List<int> SortNumbers(List<int> nums)
{
List<int> sortedList = new List<int>();
for (int i = 0; i < nums.Count(); i++)
{
for (int j = i + 1; j < nums.Count; j++)
{
if (nums[i] > nums[j])
{
//Swapping values
nums[i] = nums[i] + nums[j];
nums[j] = nums[i] - nums[j];
nums[i] = nums[i] - nums[j];
}
}
sortedList.Add(nums[i]);
}
return sortedList;
}
Result Message: Assert.AreEqual failed.
Expected: <System.Collections.Generic.List`1[System.Int32]>.
Actual :<System.Collections.Generic.List`1[System.Int32]>.
预期和实际的数据类型相同。仍然测试失败。无法理解为什么?有人可以帮我知道原因。此外,它适用于以下功能。
public List<int> SortNumbers(List<int> nums)
{
List<int> sortedList = new List<int>();
for (int i = 0; i < nums.Count(); i++)
{
for (int j = i + 1; j < nums.Count; j++)
{
if (nums[i] > nums[j])
{
//Swapping values
nums[i] = nums[i] + nums[j];
nums[j] = nums[i] - nums[j];
nums[i] = nums[i] - nums[j];
}
}
}
sortedList = nums;
return sortedList;
}
答案 0 :(得分:25)
参考类型比较。
尝试使用CollectionAssert.AreEqual或CollectionAssert.AreEquivalent。
以下是发生的事情:
你使用Assert.AreEqual(List<int>, List<int>)
,其中,CLR / .NET进入并说,&#34;是列表1的引用,与列表2相同?&#34;结果是否定的,因此CLR / .NET会向您发送错误的读数。
CollectionAssert
枚举数组(这是内部列表)并确定它们是否具有相同的项目。 CollectionAssert.AreEqual
检查他们在同一订单中是否有相同的商品。 CollectionAssert.AreEquivalent
以任何顺序检查它们是否具有相同的项目。
ANY 数组/列表/字典必须使用CollectionAssert
进行此类比较。
例如:
List<int> l1 = new List<int>();
List<int> l2 = l1;
Assert.AreEqual(l1, l2);
由于l2
已设置为与l1
相同的引用,因此结果为true。
然而,
List<int> l1 = new List<int>();
List<int> l2 = new List<int>();
Assert.AreEqual(l1, l2);
由于l2
已成为对 NEW 对象的 NEW 引用,因此会导致 false 。而使用
CollectionAssert.AreEqual(l1, l2);
在上述任何一种情况下都会导致 true 。这是因为CLR / .NET实际上是通过列表并基本上对其进行盘点。
另一个编辑,因为我想进一步澄清:你也可以使用CollectionAssert.AreEquivalent
,它不能保证相同顺序的项目,但只是保证数组/列表/字典具有相同的数量相同的项目。即:
1,2,3,3,2,1
1,3,2,2,3,1
这将导致{strong> true 与CollectionAssert.AreEquivalent
, false 与CollectionAssert.AreEqual
。