gpt4 book ai didi

c# - Assert.AreEqual 在比较两个 IEnumerable 对象时引发异常

转载 作者:太空宇宙 更新时间:2023-11-03 21:03:33 24 4
gpt4 key购买 nike

目标方法的最小起订量输入列表是

var moqReturn = new List<Text>()
{
new Text() {Id = 0, SenderId = 3, ReceiverId = 5},
new Text() {Id = 1, SenderId = 5, ReceiverId = 1},
new Text() {Id = 2, SenderId = 1, ReceiverId = 5},
new Text() {Id = 3, SenderId = 3, ReceiverId = 5},
new Text() {Id = 4, SenderId = 3, ReceiverId = 5},
new Text() {Id = 5, SenderId = 5, ReceiverId = 4},
new Text() {Id = 6, SenderId = 5, ReceiverId = 4},
new Text() {Id = 7, SenderId = 5, ReceiverId = 10}
};

测试下的方法是:给定userId = 5,top = 3,start = 0

public IEnumerable<Text> GetRecentTexts(int userId, int top, int start)
{
var allUserTexts = _textRepo.Select(m => m.SenderId == userId || m.ReceiverId == userId); // Will get the moq return

var recenteText = allUserTexts.Reverse();

return recenteText.Skip(start).Take(top);
}

预期的输出是

  var expectedOutPut = new List<Text>()
{
new Text() {Id = 7, SenderId = 5, ReceiverId = 10},
new Text() {Id = 6, SenderId = 5, ReceiverId = 4},
new Text() {Id = 5, SenderId = 5, ReceiverId = 4}
};

使用 NUnit 断言方法

var result = objectForTarget.GetRecentTexts(5, 3, 0);

Assert.AreEqual(expectedOutPut, result);

问题是断言方法显示测试失败并显示消息

<System.Collections.Generic.List`1[Text]> with 3 elements, actual is <System.Linq.Enumerable+<TakeIterator>d__24`1[Text]>
Values differ at index [0]
Expected: <Text>
But was: <Text>

我调试了目标方法,它返回了预期的结果,但 NUnit Assert 说它们不一样。

我做错了什么?

最佳答案

Assert.AreEqual 将比较两个列表的不同引用。

使用CollectionAssert.AreEqual用于比较集合

然后你需要override the Equals methods Text 或提供 IComparer

关于c# - Assert.AreEqual 在比较两个 IEnumerable 对象时引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42932701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com