如何让Moq Setup
识别两个具有相同值的数组?
我有这个方法,它将字符串列表作为参数。
class Hospital{
Patient[] GetPatients( DateTime[] dates ){
...
}
}
我设置了一个模拟,我需要确切的参数。
var hospital= new Mock<Hospital>( MockBehavior.Strict );
hospital.Setup( m => m.GetPatients( new [] { new DateTime(2016,10,30) } ) );
然后,在我的受试者中,我接听电话。
hospital.GetPatients( new [] { date } ); // date is DateTime(2016,10,30).
它无法识别我的模拟
这是很自然的,因为Equals
不认为两个数组相等
但是我该怎么做呢?
答案 0 :(得分:0)
我的解决方案是(意识到可以)将lambda放在It.Is
It.Is<>( => )
var hospital= new Mock<Hospital>( MockBehavior.Strict );
hospital.Setup( m => m.GetPatients(
It.Is<DateTime[]>( d => AreEqual(d) ) );
和辅助方法
bool AreEqual( DateTime[] dates ){
return dates.Counts == 1
&& dates[0] == new DateTime( 2016, 10, 30 );
}
答案 1 :(得分:0)
也许在您问这个问题时,Moq尚未实现。但是现在它应该可以按照您的书写方式工作了。
Moq不使用简单的.Equal()方法来验证值是否相同。它创建了一些更复杂的匹配。如果找到IEnumerable,则使用.SequenceEqual()
由于数组是无数的,因此它应该对您有用。