Moq を使用して IDataReader.GetValues(array) への呼び出しをモックする必要があります。GetValues メソッドは、DataReader の現在の行の値を「配列」に入力し、データ リーダーのフィールド数を返す必要があります。
ここに私のモックのセットアップがあります:
var data = new object[] { };
var reader = new Mock<IDataReader>();
reader.Setup(r => r.GetValues(data)).Callback<object[]>(d => {
Array.Resize(ref d, 2);
d[0] = "value 1";
d[1] = "value 2";
}).Returns(2);
...そして、これはテストされているコードです(「_reader」はモックオブジェクトです):
public int GetValues(object[] values)
{
int result = _reader.GetValues(values);
for (int i = 0; i < values.Length; i++)
{
// this is not executed because values.Length == 0
}
...
上記のコードでは、結果 == 2 (OK モック セットアップは機能しています) ですが、「値」は入力されません!
「値」配列を設定するためにモックオブジェクトを設定するにはどうすればよいですか?