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

Можно ли получить доступ к параметру, используемому для вызова фиктивного ожидания при сборке объекта 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)

Решение

Из руководства по быстрому запуску 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
                      );