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

我有一个键值存储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。


潇湘沐
浏览 89回答 1
1回答

杨__羊羊

NSubstitute 3.1.0 中的错误。已修复 4.2.1 版
打开App,查看更多内容
随时随地看视频慕课网APP