使Moq Setup识别一个带有值的数组
本文关键字:一个 数组 Setup Moq 识别 | 更新日期: 2023-09-27 18:15:36
如何使Moq Setup
识别具有相同值的两个数组?
我有一个方法,它接受一个字符串列表作为参数。
class Hospital{
Patient[] GetPatients( DateTime[] dates ){
...
}
}
在需要确切参数的地方设置了一个mock。
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).
它不能识别我的mock。
这是很自然的,因为Equals
不认为两个数组相等。
但是我要怎么做呢?
也许在你问这个问题的时候,Moq还没有实现这个。但是现在它应该按你写的方式工作了。
Moq不使用简单的. equal()方法来验证值是否相同。它创建了更复杂的匹配。如果它找到IEnumerable则使用。sequenceequal ()
我的解决方案是(意识到这是可能的)把一个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.Count == 1
&& dates[0] == new DateTime( 2016, 10, 30 );
}