Moq Setup 可以将 List 对象识别为相同的对象吗?
Can Moq Setup recognize List objects as the same?
我有一个包含 offerIds
的列表,我将其传递给 Moq 设置。我确信在代理方法执行中,我使用相同的列表调用此方法,但它 returns null
。我的问题是 Moq 可以识别 ref 对象 f.e。 List
与 Setup
参数相同?
_userOrderRepositoryMock
.Setup(x => x.GetOrderIdsByOfferIds(offerIds))
.ReturnsAsync(new Dictionary<Guid, Guid>() { });
当您像上面那样使用时,Moq 将简单地进行相等比较。 List<T>
是引用类型,所以两个列表永远不会相等,即使它们包含相似的内容。为了让它工作,我建议你需要实际使用 It
。所以像:
_userOrderRepositoryMock
.Setup(x => x.GetOrderIdsByOfferIds(
It.Is<List<obj>>(i => i.All(offerIds))
))
.ReturnsAsync(new Dictionary<Guid, Guid>() { });
即使这样也取决于 offerIds
是什么。如果 offerIds
是一个值类型,那么这将起作用,如果不是,那么您将需要编写一些 LINQ 或 Equality 函数来定义您希望它们如何对这些对象执行相等。
有关此类内容的更多信息,请参阅 What is “Best Practice” For Comparing Two Instances of a Reference Type?。
我有一个包含 offerIds
的列表,我将其传递给 Moq 设置。我确信在代理方法执行中,我使用相同的列表调用此方法,但它 returns null
。我的问题是 Moq 可以识别 ref 对象 f.e。 List
与 Setup
参数相同?
_userOrderRepositoryMock
.Setup(x => x.GetOrderIdsByOfferIds(offerIds))
.ReturnsAsync(new Dictionary<Guid, Guid>() { });
当您像上面那样使用时,Moq 将简单地进行相等比较。 List<T>
是引用类型,所以两个列表永远不会相等,即使它们包含相似的内容。为了让它工作,我建议你需要实际使用 It
。所以像:
_userOrderRepositoryMock
.Setup(x => x.GetOrderIdsByOfferIds(
It.Is<List<obj>>(i => i.All(offerIds))
))
.ReturnsAsync(new Dictionary<Guid, Guid>() { });
即使这样也取决于 offerIds
是什么。如果 offerIds
是一个值类型,那么这将起作用,如果不是,那么您将需要编写一些 LINQ 或 Equality 函数来定义您希望它们如何对这些对象执行相等。
有关此类内容的更多信息,请参阅 What is “Best Practice” For Comparing Two Instances of a Reference Type?。