Хм. Напрашивается первый вариант, но если посмотреть аналог в сишке и в крестах, то лучше второй вариант. readonly же фиксирует не данные по ссылке, а саму ссылку
Настраивается mock-объект, настраивается что б при вызыве геттера свойства Products возвращался объект products Данные о том, какое свойство настраивается, передаются через лямбда выражение - сильно удобнее чем ручками PropertyInfo через reflection вытаскивать или строкой передавать