Убедитесь, что PostCodeSearch
объявлен virtual
на поддельных типах.
public virtual string PostCodeSearch { get; set; }
MOQ может фальсифицировать только свойства, которые переопределение.
Edit: дело с не overridables
Если Faked тип не может быть изменен есть различные альтернативы:
Изменить код производства использовать обертку из фальшивого класса. Оболочка будет иметь тот же API, что и обернутый класс, и все, что он будет делать, - это маршрут вызовов к обернутому объекту. Обертка объявит методы и свойства как virtual
. Таким образом, вы получите такое же поведение в коде с небольшими изменениями.
Например, если исходный класс быть сфальсифицирована является MyClass:
public class MyClassWrapper
{
MyClass myClass;
MyClassWrapper(MyClass myClass)
{
this.myClass = myClass;
}
public virtual string PostCodeSearch
{
get { return myClass.PostCodeSearch; }
set { myClass.PostCodeSearch = value; };
}
}
Код производства будет использовать MyClassWrapper
вместо MyClass
, и это будет сделать код проверяемых с помощью этого мало изменений.
Другой альтернативой является использование изоляции. рамки изоляции позволяют притворяется не-перегружаемых членов, статические члены, запечатанных классы ...
Например, с помощью Typemock Isolator:
MyClass myClass = new MyClass();
Isolate.WhenCalled(() => myClass.PostCodeSearch).WillReturn("faked value");
В этом примере подделать поведениие установлен непосредственно на оригинальном классе. Преимущество здесь в том, что в производственном коде не требуется никаких изменений, чтобы сделать его проверяемым.
Отказа от ответственности - Я работаю в TypeMock
Хорошо, но когда у меня нет доступа к источнику моего использование .Object поэтому справедливо? –
@Daz Lewis, это немного более интересный случай, обновленный ответ – Elisha