Ответ 1
Так как это свойство только для чтения, вам нужно сказать:
stubRepository.Stub(x => x.StoreDeviceID).Return("test");
Обычно с заглушками свойства используются как обычные свойства С#. Поэтому для свойств, отличных от readonly, вы бы сказали: stubRepository.someProperty = "test";
Также обратите внимание, что если вы хотите настроить метод, чтобы вести себя определенным образом, независимо от того, является ли он макетом или заглушкой, вы всегда будете говорить:
stubRepository.Stub(x => x.someMethod()).Return("foo");
Помните, что заглушки существуют, чтобы поставлять ваши модульные тесты с их необходимыми зависимостями, но не существует для проверки версий; что за то, что надо.
Используйте заглушку, когда вы хотите указать зависимость, которая ведет себя определенным образом. Используйте макет, если вы хотите проверить правильность взаимодействия определенной зависимости.
Из (выдающегося) Rhino Wiki:
Макет - это объект, на который мы можем установить ожидания, и который будет убедитесь, что ожидаемые действия действительно произошли. Заглушка - это объект, который вы используете для перехода к тестируемому коду. Ты можешь установить на него ожидания, поэтому он будет действовать определенным образом, но те ожидания никогда не будут проверены. Свойства заглушки будут автоматически ведут себя как обычные свойства, и вы не можете установить ожидания от них.
Если вы хотите проверить поведение тестируемого кода, вы используйте макет с соответствующим ожиданием и убедитесь в этом. если ты хотите просто передать значение, которое может потребоваться определенным образом, но не является фокусом этого теста, вы будете использовать заглушку.
ВАЖНО: заглушка никогда не приведет к сбою теста.