我正在尝试验证对索引属性设置器的调用。该属性可在界面中设置,类型为
byte[]
这是我验证设置器的代码:
var valueBytes = Encoding.UTF8.GetBytes(TestPrivateDataSourceValue);
Mock.Get(privateDataSource).VerifySet(dataSource => dataSource[TestPrivateDataSourceIndex] = valueBytes, Times.Once());
可能出了什么问题?我在一个单独的项目中重试了这一点,并且工作正常。
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());