2012-05-02 15 views
2

私はいくつかのTPLデータフローコードをテストして、NSubstitue param matchingで共分散問題のように見えます。アサートされます。代用と共分散のサポート?

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>>()); 

のでつまずきは、それが実装しているクラスのActionBlockにITargetBlockのマッチング共変されていないことのように見えます。

明示的にActionBlockに一致させることなくこれを行う方法はありますか、それともNSubstituteの現在の制限ですか?

編集:Everyonesの便宜のために、これはActionBlockのクラス署名です。私は、問題のナブは、共分散を通じて、ITargetBlock<T>ActionBlock<T>と一致しなければならないことである

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

これは、などのインターフェースのトンで引かず、共分散の問題を見るには十分だと思います。 NS substituteのarg matchers Arg.Any<ITargetBlock<ChainLinkFakeData>>()はそうではありませんか?

簡単な回避策はArg.Any<ActionBlock<ChainLinkFakeData>>()ですが、これはテストの実装対象の知識を必要とします。

私はこれをテストしていませんが、IEnumerable<T>と一致しない類似のprobがあると思います(List<T>)。

+0

インターフェイスの例を表示できますか?その動作を示す簡単なテストはありますか? – Bronumski

+0

Okが上に追加されます。 – DanH

+0

@ダン - これはスレッドの問題のようです。 1件の通話があり、1件の一致する通話が受信されました。マスターブランチには未リリースの修正があります(https://github.com/nsubstitute/NSubstitute/blob/master/CHANGELOG.txt#L6)。 –

答えて

2

これはNSubstituteのバグです。これはv1.4.0で修正する必要があります。 (original issueを参照してください)

関連する問題