C# CollectionAssert.Areequality vs Assert.Equals() public void NumericListCanBeSorted() { var sorted=sort.SortNumbers(nums); Assert.AreEqual(已排序,nums); } 公共列表排序编号(列表NUM) { List sortedList=新列表(); 对于(int i=0;i
预期和实际的数据类型相同。测试仍然失败。不明白为什么?有人能帮我知道原因吗?此外,它还有以下功能C# CollectionAssert.Areequality vs Assert.Equals() public void NumericListCanBeSorted() { var sorted=sort.SortNumbers(nums); Assert.AreEqual(已排序,nums); } 公共列表排序编号(列表NUM) { List sortedList=新列表(); 对于(int i=0;i,c#,unit-testing,equality,C#,Unit Testing,Equality,预期和实际的数据类型相同。测试仍然失败。不明白为什么?有人能帮我知道原因吗?此外,它还有以下功能 public void NumericListCanBeSorted() { var sorted = sort.SortNumbers(nums); Assert.AreEqual(sorted, nums); } public List<int> SortNumbers(List<int> nums) { List<int>
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 SortNumbers(List nums)
{
List sortedList=新列表();
对于(int i=0;inums[j])
{
//交换值
nums[i]=nums[i]+nums[j];
nums[j]=nums[i]-nums[j];
nums[i]=nums[i]-nums[j];
}
}
}
分类列表=nums;
返回分类列表;
}
参考类型比较
尝试使用CollectionAssert.AreEqual或CollectionAssert.Areequality
下面是发生的情况:
您使用了Assert.AreEqual(List,List)
,其中,CLR/.NET进入并说,“List 1的引用与List 2相同吗?”结果为否,因此CLR/.NET向您发送错误的读数
CollectionAssert
枚举数组(列表在内部是什么),并确定它们是否具有相同的项<代码>集合Assert.AreEqual检查它们是否具有相同顺序的相同项目CollectionAssert.AreEquivalent
检查它们是否以任何顺序拥有相同的项目
任何数组/列表/字典必须使用CollectionAssert
进行此类比较
例如:
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;
}
由于l2
对新对象进行了新引用,这将导致错误。鉴于使用
List<int> l1 = new List<int>();
List<int> l2 = new List<int>();
Assert.AreEqual(l1, l2);
在上述任何一种情况下,都将导致为true。这是因为CLR/.NET实际上遍历了该列表并对其进行了编目
另一个编辑,因为我想进一步澄清:您还可以使用CollectionAssert.AreEquivalent
,它不会保证项目的顺序相同,只会保证数组/列表/字典中的项目数量相同。即:
CollectionAssert.AreEqual(l1, l2);
这将导致true与
CollectionAssert.Areequired
,但是false与CollectionAssert.Areequired
您能详细解释一下吗。我在找一个相等的。@SravanKumar sortedList!=nums因此失败-您需要逐项比较,而不是两个数组对象。调试并尝试在即时窗口或监视窗口中检查sortedList==nums。@Danny varod sortedList确实等于nums(两者都包含已排序的数字)。@EBrown的解释是我遗漏的。谢谢你,埃布罗恩
CollectionAssert.AreEqual(l1, l2);
1,2,3,3,2,1
1,3,2,2,3,1