2016-10-30 7 views
1

Moq Setupは、同じ値を持つ2つの配列を同じにする方法を教えてください。Moq設定で値が配列に認識されるようにする

私はパラメータとして文字列のリストを取るこのメソッドを持っています。

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は2つの配列が等しいとは考えていないので、自然です。
しかし、どうすればいいですか?

答えて

0

私のソリューションをすることでしたIt.Is<>(=>)

var hospital= new Mock<Hospital>(MockBehavior.Strict); 
hospital.Setup(m => m.GetPatients(
    It.Is<DateTime[]>(d => AreEqual(d))); 

とヘルパーメソッドのようIt.Isにラムダを入れて(それが可能であると認識する)

bool AreEqual(DateTime[] dates){ 
    return dates.Counts == 1 
     && dates[0] == new DateTime(2016, 10, 30); 
} 
関連する問題