CollectionAssert.AreEquivalent 对比 Assert.Equals()
CollectionAssert.AreEquivalent vs Assert.Equals()
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]>.
预期和实际的数据类型相同。仍然测试失败。不明白为什么?有人可以帮我知道 reason.Moreover,它适用于以下功能。
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;
}
引用类型比较。
尝试使用 CollectionAssert.AreEqual 或 CollectionAssert.AreEquivalent。
情况如下:
你用了Assert.AreEqual(List<int>, List<int>)
,其中CLR/.NET进去说,"is the reference of List 1 the same as List 2?"结果是no,所以CLR/.NET给你发了一个错误的读数。
CollectionAssert
枚举数组(这是内部列表)并确定它们是否具有相同的项目。 CollectionAssert.AreEqual
检查他们是否有相同订单的相同商品。 CollectionAssert.AreEquivalent
检查他们是否有相同的物品,顺序不限。
任何 array/List/Dictionary 必须使用CollectionAssert
比较。
例如:
List<int> l1 = new List<int>();
List<int> l2 = l1;
Assert.AreEqual(l1, l2);
这将导致 true,因为 l2
已设置为与 l1
相同的引用。
然而,
List<int> l1 = new List<int>();
List<int> l2 = new List<int>();
Assert.AreEqual(l1, l2);
这将导致 false,因为 l2
已成为 NEW 对 [=54= 的引用]NEW 对象。而使用
CollectionAssert.AreEqual(l1, l2);
在上述任何一种情况下都会导致 true。这是因为 CLR/.NET 实际上会遍历列表并清点它,本质上。
另一个编辑,因为我想进一步澄清:你也可以使用 CollectionAssert.AreEquivalent
,这不能保证项目顺序相同,但只会保证 arrays/Lists/Dictionaries 具有相同的顺序相同物品的数量。即:
1,2,3,3,2,1
1,3,2,2,3,1
这将导致 true 与 CollectionAssert.AreEquivalent
,但 false 与 CollectionAssert.AreEqual
.
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]>.
预期和实际的数据类型相同。仍然测试失败。不明白为什么?有人可以帮我知道 reason.Moreover,它适用于以下功能。
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;
}
引用类型比较。
尝试使用 CollectionAssert.AreEqual 或 CollectionAssert.AreEquivalent。
情况如下:
你用了Assert.AreEqual(List<int>, List<int>)
,其中CLR/.NET进去说,"is the reference of List 1 the same as List 2?"结果是no,所以CLR/.NET给你发了一个错误的读数。
CollectionAssert
枚举数组(这是内部列表)并确定它们是否具有相同的项目。 CollectionAssert.AreEqual
检查他们是否有相同订单的相同商品。 CollectionAssert.AreEquivalent
检查他们是否有相同的物品,顺序不限。
任何 array/List/Dictionary 必须使用CollectionAssert
比较。
例如:
List<int> l1 = new List<int>();
List<int> l2 = l1;
Assert.AreEqual(l1, l2);
这将导致 true,因为 l2
已设置为与 l1
相同的引用。
然而,
List<int> l1 = new List<int>();
List<int> l2 = new List<int>();
Assert.AreEqual(l1, l2);
这将导致 false,因为 l2
已成为 NEW 对 [=54= 的引用]NEW 对象。而使用
CollectionAssert.AreEqual(l1, l2);
在上述任何一种情况下都会导致 true。这是因为 CLR/.NET 实际上会遍历列表并清点它,本质上。
另一个编辑,因为我想进一步澄清:你也可以使用 CollectionAssert.AreEquivalent
,这不能保证项目顺序相同,但只会保证 arrays/Lists/Dictionaries 具有相同的顺序相同物品的数量。即:
1,2,3,3,2,1
1,3,2,2,3,1
这将导致 true 与 CollectionAssert.AreEquivalent
,但 false 与 CollectionAssert.AreEqual
.