2015-03-18 2 views
2

У меня есть тестовый пример, в котором проблема, в которой выбрано исключение в заголовке.Не удается вызвать Swap.AllInstances() более одного раза по типу

Исключение возникает только тогда, когда в тесте также присутствуют статические методы подделки.

Моя презумпция заключается в том, что поддельный StaticMethods также выполняет обмен. Если это так, как я могу подделывать статические методы, а также заменять экземпляры с помощью моего поддельного экземпляра?

[Test] 
[Isolated] 
[Factory("TruckDispatchData")] 
public void TruckDispatchTest(
    IEnumerable<DeliveryInfo> deliveryInfo, 
    bool expectedResult) 
{ 
    Isolate.Fake.StaticMethods(typeof(Order), Members.MustSpecifyReturnValues); 
    var order = Isolate.Fake.Instance<Order>(Members.MustSpecifyReturnValues, ConstructorWillBe.Ignored, BaseConstructorWillBe.Ignored); 
    Isolate.Swap.AllInstances<Order>().With(order); 

ответ

2

Я работаю в TypeMock, Только что проверил этот вопрос, и я могу подтвердить, что это ошибка. Обходной путь для этой проблемы довольно прост, вам просто нужно переключить порядок вызовов. например

var order = Isolate.Fake.Instance<Order>(Members.MustSpecifyReturnValues, ConstructorWillBe.Ignored, BaseConstructorWillBe.Ignored); 
Isolate.Swap.AllInstances<Order>().With(order); 
Isolate.Fake.StaticMethods(typeof(Order), Members.MustSpecifyReturnValues); 

Он будет исправлен в будущих версиях.

+0

Исправлено уже ... –

0

Не может сказать точно, так как не использовать TypeMock библиотеки, но я думаю, что проблема в вашем Swap метода:

Isolate.Swap.AllInstances<Order>() 

Как вы называете все экземпляров из Order класс, Статические методы не задействованы (так как они не являются Order методами экземпляра, они являются Type из typeof(Order) методов экземпляра), поэтому может быть Swap подход может быть использован d в каком-то другом, что-то вроде этого:

Isolate.Swap.Static_SOMETHING_HERE.With(order); 
+0

Статический метод фальсификации - разрешить доступ к статическим методам типа объекта по мере указания. Тем не менее, своп заменяет только экземпляры заказа объекта с помощью фальшивой версии экземпляра. Я не пытаюсь поменять статический порядок экземпляром, я пытаюсь заменить экземпляр, например, и отдельно получить доступ к статическим методам этого типа. Я думаю, что реализация StakeMethod faking также должна выполнить своп, чтобы получить ошибку, о которой идет речь. – sweetfa

Смежные вопросы