You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NSubstitute中Mock属性setter,解决VB.NET场景下的匹配问题

解决方案

1. 写法错误修正

你原有代码的模式选择器使用Function定义,会被NSubstitute识别为「获取属性值后做相等比较」的表达式,无法匹配setter调用。需要改为Sub定义赋值操作,让框架正确识别你要匹配的是索引属性的setter。

2. CallInfo参数获取规则

索引属性的setter包含两个输入参数:第0位为你定义的索引值i As ULong,第1位为要设置的属性值T,可直接通过CallInfo的泛型方法提取。

完整可运行代码如下:

Public Interface IDAO(Of T) : Inherits IDAO
    Default Property Value(i As ULong) As T
    Function Append(ts As ICollection(Of T)) As ULong
    Function Remove(f As Predicate(Of T)) As ICollection(Of T)
    Function GetRestricted(f As Predicate(Of T)) As ICollection(Of T)
    Function RemoveFirst(f As Predicate(Of T)) As T
    Function GetFirst(f As Predicate(Of T)) As T
End Interface
'...
_mock.WhenForAnyArgs(
    Sub(mock As IDAO(Of T)) mock.Value(Arg.Any(Of ULong)) = Arg.Any(Of T)()
).Do(
    Sub(c As Core.CallInfo)
        ' 提取setter的两个参数
        Dim index As ULong = c.Arg(Of ULong)(0)
        Dim setValue As T = c.Arg(Of T)(1)
        ' 执行你需要的自定义逻辑
        _inner.data(index) = setValue
    End Sub
)

如果需要针对特定索引匹配setter,把Arg.Any(Of ULong)替换为对应固定值即可。

内容的提问来源于stack exchange,提问作者user13507303

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:36:03