#c# #moq
#c# #moq
Вопрос:
У меня есть вызов как таковой:
_session.Setup(session => session.SaveOrUpdate(It.IsAny<Foo>()))
Я хочу получить копию любого экземпляра Foo
, в который передается SaveOrUpdate
при запуске теста для проверки. Как я могу получить точную копию этого Foo
в свой тест?
Я пытался использовать .Callback
, но, возможно, это не способ сделать это? Или, может быть, я делаю это неправильно… не уверен, но мне могла бы понадобиться помощь, чтобы выяснить, возможно ли это и как это сделать, пожалуйста.
Foo foo;
_session.Setup(session => session.SaveOrUpdate(It.IsAny<Foo>()))
.Callback<Foo>(fooInstanceBeingSaved => foo = fooInstanceBeingSaved as Foo);
В этом сценарии foo
всегда возвращается null
, даже если значение real foo
на уровне сервиса заполнено.
РЕДАКТИРОВАТЬ: это не дубликат указанного дубликата, потому что этот вопрос отличается тем, что saveOrUpdate возвращает void . В сообщаемых повторяющихся статьях эти методы возвращают что-то отличное от void . Таким образом, мне нужно получить переменную из метода, в котором «Returns» не является допустимым параметром — что является решением в других статьях.
Комментарии:
1. Выглядит нормально. Вы уверены, что
foo
это значение равно null, потому что обратный вызов не вызывается? Или это потомуas
, что возвращаетсяnull
? Можете ли вы поставить точку останова в лямбде обратного вызова для проверки?2. Да, foo возвращает значение null . Даже если я оставлю его как объект без какого-либо приведения / «как».
Ответ №1:
Здесь используются некоторые психические способности…
Похоже, вы можете использовать NHibernate , что, если это так, означает SaveOrUpdate
, что имеет эту подпись:
void SaveOrUpdate(object obj);
Итак, чтобы получить ваш Foo
объект, вам нужно указать object
в качестве параметра типа, например:
_session.Setup(session => session.SaveOrUpdate(It.IsAny<object>()))
.Callback<object>(objectBeingSaved => foo = objectBeingSaved as Foo);
Комментарии:
1. Ах, я раньше не думал менять IsAny<Foo> на IsAny<object> . Теперь это работает. Спасибо!