Как заглушить свойство ReadOnly конкретного класса - PullRequest
4 голосов
/ 18 июля 2011

Допустим, у меня есть класс Concrete со свойством только для чтения, например,

public class TestClass
{
   public bool Squid {get;private set;}
}

И теперь я хочу заглушить ответ на Squid, например

Squid squid = MockRepository.GenerateStub<Squid>();
squid.Stub(c => c.Squid).Return(true);

Однако, когда я запускаюэто я получаю следующее сообщение об ошибке: System.InvalidOperationException: Неверный вызов, последний вызов был использован или не было сделано (убедитесь, что вы вызываете виртуальный (C #) / Overridable (VB) метод).

Есть ли способ заглушить это свойство без создания интерфейса для класса?

Ответы [ 2 ]

5 голосов
/ 18 июля 2011

Да, есть: Сделайте свойство virtual как уже описано в сообщении об исключении.

4 голосов
/ 18 июля 2011

Вы можете использовать рефлексию для вызова частного установщика.

Или использовать рефлексию, чтобы найти фоновое поле и установить его напрямую (немного сложнее, но работает с неавтоматическими свойствами с тривиальным геттером).1003 *

И, наконец, для этого можно использовать API профилирования.(AFAIK Moles основано на этом).

Если что-то из этого является хорошей идеей, это другой вопрос ...

...