У меня есть сторонний тип BillingAddress
который при декомпиляции заметил, что некоторые свойства в его конструкторе (с сеанса) установлены. Я хотел бы, чтобы дразнить такой тип и отправить его в функцию полезности:Mock object, который устанавливает элемент из сеанса в его конструкторе
// need to be able to unit test this method
public static ShippingAddress Convert(BillingAddress billingAddress){
var sAddress = new ShippingAddress();
sAddress.City = billingAddress.City;
// setting several shipping address properties
//...
}
Я не могу создать новый экземпляр BillingAddress из-за его Session код конструктора (когда я делаю новый BillingAddress() он бросает исключение - потому что она работает только в определенном контексте)
Decomipled код 3 партии Lib:
public BillingAddress(); // calls base() => gets session stuff
protected BillingAddress(SerializationInfo info, StreamingContext context);
Итак, я пытаюсь издеваться BillingAddress. Это возможно? как?
Я попытался это:
...
Mock<BillingAddress> m = new Mock<BillingAddress>();
var sAddress = Converter.Convert(c, m.Object);
я получаю:
Исключение типа 'System.Reflection.TargetInvocationException' произошло в mscorlib.dll, но не был обработан в пользовательском коде
также пробовал:
var ac = new Mock<BillingAddress>(MockBehavior.Loose, new object[] { new Mock<SerializationInfo>(), new StreamingContext()});
же ошибка
UPDATE:
Конструктор BillingAddress:
// Decompiled code
public BillingAddress()
: base(OrderContext.Current.MetaClass)
{
Есть ли способ издеваться BillingAddress() => так что при вызове базы он будет вводить макет заказаКонтекст? Что-то вроде этого возможно?
OrderContext - это открытый класс, обладающий свойством static Instance (Current).
Итак, вы имеете в виду 'BillingAddress' обращается к некоторому статическому объекту?Можете ли вы издеваться над этим *, чтобы вы могли правильно создать платежный адрес самостоятельно? – poke
есть. это доступ к материалам из сеанса при создании нового BillingAddress(). Так я должен был бы издеваться над дизайнером? если да, то как? – ShaneKm
Статик не может насмехаться с Moq. Но вы можете создать интерфейс для стороннего типа и высмеять этот интерфейс. – dee