2016-04-22 4 views
0

Исключение при отсутствии поддержки при подписке на получение данных коллекции IEnumerable с помощью приведенного ниже кода. Не удалось подписаться на опубликованный объект Collection.Исключение при проверке подписчиков агрегатора событий с использованием Moq

Mock<IEventAggregator> _mockEventAgg = new Mock<IEventAggregator>(); 
_mockEventAgg.Setup(x => x.GetEvent<ShowScreenEvent>().Publish(new ObservableCollection<Customer>() 
       { 
       // Customer properties or details  
       })); 


_mockEventAgg.Setup(m => m.GetEvent<ShowScreenEvent>().Subscribe(It.IsAny<Action<IEnumerable<Customer>>>())) 
      .Callback<IEnumerable<Customer>>(customers => SelectedCustomerData = customers); 

Исключение:

Исключение типа «System.NotSupportedException» произошло в Moq.dll, но не был обработан в пользовательском коде

Дополнительная информация: Invalid установка на невиртуальный (Исключительно в VB) член: m => m.GetEvent(). Подписаться (It.IsAny())

+0

Из чтения сообщения об исключении является 'ShowScreenEvent.Subscribe()' не виртуальным? –

+0

Класс 'ShowScreenEvent' наследуется от' PubSubEvent > 'class – venkat

+0

Посмотрите на этот вопрос http://stackoverflow.com/questions/35868184/nsubstitute-vs-prism-eventaggregator-assert-that-calling-a -method-triggers-even/35889556 # 35889556 (вы можете, конечно, преобразовать это из NSubstitute в Moq) – Haukinger

ответ

0

Исключение, которое вы получаете, говорит, что Moq не может установить метод b потому что он не виртуальный. Moq не поддерживает насмешливые методы на конкретном типе, которые не отмечены virtual; see here для получения дополнительной информации.

В вашем случае вы пытаетесь высмеять ShowScreenEvent.Subscribe(...), который, как вы говорите, определяется его базовым классом, PubSubEvent<IEnumerable<Customer>>. Действительно, он не является виртуальным:

public SubscriptionToken Subscribe(Action<TPayload> action) 

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

  • Нет связанных вопросов^_^