2012-05-02 4 views
2

Я пытаюсь протестировать некоторый код потока данных TPL и работать с тем, что похоже на проблему ковариации с совпадением параметров NSubstitue. Он утверждает:Поддержка NSubstitute и ковариации?

Expected to receive exactly 1 call matching: 
    Subscribe("987123", any ITargetBlock`1) 
Actually received 1 matching call: 
    Subscribe("987123", ActionBlock<ChainLinkFakeData>) 

От Сличитель из:

childFakeSubscriptionSource 
    .Received(1) 
    .Subscribe(
     Arg.Is<string>("987123"), 
     Arg.Any<ITargetBlock<ChainLinkFakeData>>()); 

Так камень преткновения, как представляется, что это не ковариантны соответствия ITargetBlock осуществляющему класса ActionBlock.

Есть ли способ сделать это без явного сопоставления с ActionBlock, или это просто текущее ограничение NSubstitute?

Редактировать: для удобства каждого из них это подпись класса ActionBlock. Я думаю, что этого достаточно, чтобы увидеть проблему ковариационной без вытягивать в тонне интерфейсов и т.д.

public sealed class ActionBlock<TInput> : ITargetBlock<TInput>, IDataflowBlock 

шишка вопроса является то, что через ковариации, ITargetBlock<T> должен совпадать с ActionBlock<T>. Аргументаторы Arg.Any<ITargetBlock<ChainLinkFakeData>>() в NSubstitute не кажутся?

Простая работа - Arg.Any<ActionBlock<ChainLinkFakeData>>(), но для этого требуется знание предмета при реализации тестов.

Что касается более простого примера, я не проверял это, но я ожидаю, что будут похожие проблемы с IEnumerable<T>, не соответствующие List<T>.

+0

Можете ли вы показать пример интерфейса, есть ли у вас простой тест, показывающий поведение? – Bronumski

+0

Хорошо добавит его выше. – DanH

+0

@Danh - Мне кажется, что это проблема с потоками. Он ожидал 1 вызов и получил 1 соответствующий вызов - это должно означать, что ожидание соответствует правильно. В основной ветке есть [невыпущенное исправление] (https://github.com/nsubstitute/NSubstitute/blob/master/CHANGELOG.txt#L6). –

ответ

2

Это была ошибка в NSubstitute, которая должна быть исправлена ​​с версии 1.1. (См. original issue)

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