VerifySet 和 SetupSet 为索引属性提供异常

问题描述 投票:0回答:1

我正在尝试验证对索引属性设置器的调用。该属性可在界面中设置,类型为

byte[]
这是我验证设置器的代码:

var valueBytes = Encoding.UTF8.GetBytes(TestPrivateDataSourceValue);
Mock.Get(privateDataSource).VerifySet(dataSource => dataSource[TestPrivateDataSourceIndex] = valueBytes, Times.Once());

但我遇到以下异常:

可能出了什么问题?我在一个单独的项目中重试了这一点,并且工作正常。

c# automated-tests moq
1个回答
0
投票

byte[]
类型是引用类型。这意味着当您进行验证时,Moq 正在比较引用而不是数组的内容。如果在您正在测试的方法中的某个位置再次创建
valueBytes
,则其引用将与您为验证而创建的引用不同,即使它们的内容相同。这是
byte[]
和起订量的一个非常常见的问题。

解决此问题的方法是使用

It.Is<byte[]>(b => b.SequenceEqual(valueBytes))
进行验证:

Mock.Get(privateDataSource).VerifySet(dataSource => dataSource[TestPrivateDataSourceIndex] = It.Is<byte[]>(b => b.SequenceEqual(valueBytes)), Times.Once());
© www.soinside.com 2019 - 2024. All rights reserved.