Доступ к исходным аргументам Expect () при сборке значения в Returns () - PullRequest
21 голосов
/ 23 февраля 2009

Можно ли получить доступ к параметру, используемому для вызова ложного ожидания при сборке объекта Returns?

Вот заглушка для задействованных объектов, и, учитывая это, я пытаюсь смоделировать коллекцию:

Class CollectionValue {
    public Id { get; set; }
}
Class Collection {
    private List<CollectionValue> AllValues { get; set; }
    public List<CollectionValue> GetById(List<int> ids) {
        return AllValues.Where(v => ids.Contains(v.Id));
    }
}

Учитывая тестовый список CollectionValues, который будет использоваться для смоделированного объекта, как можно настроить ожидание, которое будет обрабатывать все возможные перестановки идентификаторов в этом списке CollectionValues, включая вызовы, объединяющие существующие идентификаторы и не существующие идентификаторы? Моя проблема возникает из-за желания настроить все возможные ожидания одним вызовом; если доступ к исходному параметру невозможен, я с такой же легкостью могу установить точное ожидание, которое я хочу проверять в каждом вызове каждый раз.

Вот что я надеялся сделать, где "???" представляет, где было бы удобно иметь доступ к параметру, используемому для вызова GetById (тот, который квалифицировал ограничение It.IsAny):

CollectionMock.Expect(c => c.GetById(It.IsAny<List<int>>())).Returns(???);

1 Ответ

61 голосов
/ 02 июня 2009

Из руководства по moq quickstart :

// access invocation arguments when returning a value
mock.Setup(x => x.Execute(It.IsAny<string>()))
                .Returns((string s) => s.ToLower());

Что предполагает поэтому, что вы можете заполнить свой ??? как

CollectionMock.Expect(c => c.GetById(It.IsAny<List<int>>()))
              .Returns((List<int> l) => //Do some stuff with l
                      );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...