gpt4 book ai didi

c# - NSubstitute 和协方差支持?

转载 作者:太空宇宙 更新时间:2023-11-03 11:22:45 24 4
gpt4 key购买 nike

我正在尝试测试一些 TPL 数据流代码,并遇到了看起来像 NSubstitue 参数匹配的协方差问题。它断言:

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的类签名。我认为这足以在不引入大量接口(interface)等的情况下看到协方差问题。

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

问题的核心是通过协方差,ITargetBlock<T>应该匹配 ActionBlock<T> . arg 匹配器 Arg.Any<ITargetBlock<ChainLinkFakeData>>()在 NSubstitute 中似乎没有?

简单的解决方法是 Arg.Any<ActionBlock<ChainLinkFakeData>>()但这需要了解测试实现中的主题。

就更简单的例子而言,我还没有测试过这个,但我预计 IEnumerable<T> 也会有类似的问题。不匹配 List<T> .

最佳答案

这是 NSubstitute 中的一个错误,应该从 v1.4.0 开始修复。 (参见 original issue)

关于c# - NSubstitute 和协方差支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10410713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com