Подтвердить что ты не робот

Доступ к исходным аргументам Expect() при сборке значения в Returns()

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

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

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(???);
4b9b3361

Ответ 1

Из руководства по быстрому запуску moq:

// 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
                      );