为了账号安全,请及时绑定邮箱和手机立即绑定

当输出参数返回不同的派生类型时,NSubstitute 抛出

当输出参数返回不同的派生类型时,NSubstitute 抛出

C#
潇湘沐 2023-05-13 16:13:31
我有一个键值存储keyValueDatabase。要请求数据,IKeyValueResult keyValueDatabase.GetKeyValue(string id, out IKeyValue value)必须使用请求值的 id 调用。该值作为从 IKeyValue 派生的对象通过 out 参数返回。界面如下所示:public interface IKeyValue{  string ID { get; set; }}//analogue IKeyValueString...public interface IKeyValueDouble : IKeyValue{  double Value { get; set; }}现在我使用下面的代码配置这个键值存储的存根。ReturnedKeyValuesIKeyValue是我创建的不同类型的存根的集合。IKeyValue keyValue;keyValueDatabase.GetKeyValue(Arg.Any<string>(),    out Arg.Any<IKeyValue>()).ReturnsForAnyArgs(info =>{    if (ReturnedKeyValues.Select(keyVal => keyVal.ID).Contains(info[0]))    {        info[1] = ReturnedKeyValues.First(keyVal => keyVal.ID == (string)info[0]);        return okResult;    }    else    {        info[1] = null;        return unavailableResult;    }});当第一次使用keyValueDatabase.GetKeyValueID 为“a”的存根时,它会返回 IKeyValueDouble 类型的输出值。现在,当第二次使用 id 'b' 调用此方法时,应返回 IKeyValueString 类型的值。但是,在这种情况下会抛出 ArgumentSetWithIncompatibleValueException:无法将类型 ObjectProxy_1 的值设置为参数 1 (IKeyValue&),因为类型不兼容。使用Returnsinstead of 的ReturnsForAnyArgs行为方式相同。我正在使用 NSubstitute 4.2.0 和 .Net-Framework 4.7。
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

NSubstitute 3.1.0 中的错误。已修复 4.2.1 版



查看完整回答
反对 回复 2023-05-13
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信