Макет IDataRecord с использованием Moq - PullRequest
3 голосов
/ 02 августа 2011

Я пытаюсь макетировать интерфейс IDataRecord.

Пока у меня есть:

        var mockIDataRecord = new Mock<IDataRecord>();
        mockIDataRecord.SetupGet(c => c["id"]).Returns(7);
        var z = mockIDataRecord["id"];

Но Visual Studio выдает ошибку компиляции в последней строке этого:

Ошибка 2 Не удается применить индексирование с помощью [] к выражению типа 'Moq.Mock'

Есть предложения?

Ответы [ 2 ]

4 голосов
/ 02 августа 2011

Ошибка - это то, что говорит Visual Studio.Вы применяете индексирование к экземпляру класса Mock, а не к его универсальному параметру (IDataRecord в вашем случае).Используйте Mock.Object Свойство, которое будет возвращать IDataRecord и применять к нему индексацию

var z = mockIDataRecord.Object["id"];
0 голосов
/ 02 августа 2011

Вы создали макет объекта (типа IDataRecord). Однако вы пытаетесь получить доступ к mockIDataRecord [id], что подразумевает, что mockIDataRecord является коллекцией (Array?).

Несоответствие типов, вероятно, является причиной ошибки.

Можете ли вы попробовать что-то вроде этого (я не проверял синтаксис):

var mockIDataRecord = new Mock<IDataRecord[]>();
...