2010-08-03 2 views
2

один из моего репозитория класса (скажем, PersonRepo) имеет делегат в качестве своей собственности что-то вроде этогоMocking Func свойство класса

private readonly Func<INameRepo> _nameRepo; 

и помимо этого он наследуется классом, который сам ожидает еще один объект (скажем, сессии).

Таким образом, когда я инициализировать это в моем тесте я сделать что-то вроде

var funcNameRepo=autoMock.Mock<Func<INameRepo>>(); 
_personRepo= new PersonRepo(session,funcNameRepo.Object); 

, но когда я запускаю этот тест я получаю следующее сообщение об ошибке:

Unable to cast object of type 'System.Func`1[Repositories.Interfaces.INameRepo]' to type Moq.IMocked`1[System.Func`1[Repositories.Interfaces.INameRepo]]'. 

, что вы думаете, что я делаю неправильно Вот. пожалуйста помогите.

+0

You синтаксис вы становится искажены из-за дженериков. Пожалуйста, отформатируйте свой код с помощью кнопки 10101. –

+1

Как выглядит трассировка стека при возникновении ошибки? Я не вижу нигде в вашем коде, который, похоже, должен ожидать IMocked <...>. – dahlbyk

+0

Может быть проблемой Automock, поскольку она пытается разрешить типы детей. Можете ли вы попробовать один и тот же пример без использования Automock, только с MOQ? –

ответ

3

Зачем смеяться Func<INameRepo>? Если вы хотите, чтобы дразнить INameRepo, создать макет для INameRepo и передать его на свой PersonRepo через лямбда (который будет Func<INameRepo>):

var nameRepo = autoMock.Mock<INameRepo>(); 
_personRepo = new PersonRepo(session,() => nameRepo.Object); 
+0

эй спасибо. это работает .. жаль потребовалось некоторое время, чтобы ответить .. я удалил func от моего конструктора, но это внезапно ударило меня сегодня. – Baz1nga

Смежные вопросы