Убедитесь, что PostCodeSearch
объявлено virtual
для поддельных типов.
public virtual string PostCodeSearch { get; set; }
moq может подделывать только свойства, которые могут быть переопределены.
Редактировать: работа с не переопределяемыми
Если поддельный тип не может быть изменен, есть разные альтернативы:
Измените производственный код, чтобы использовать оболочку поддельного класса.Оболочка будет иметь тот же 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