我使用Machine.Fakes.NSubstitute,并希望“伪造”返回值,以便如果输入参数与特定值匹配,则返回模拟对象,否则返回null。
我尝试了以下几点:
host.WhenToldTo(h => h.GetTenantInstance(Param.Is(new Uri("http://foo.bar"))))
.Return(new TenantInstance());但是它抛出以下异常:
System.InvalidCastException:无法将'System.Linq.Expressions.NewExpression‘类型的对象强制转换为'System.Linq.Expressions.ConstantExpression’。
我目前的解决办法是执行以下操作:
host.WhenToldTo(h => h.GetTenantInstance(Param.IsAny<Uri>()))
.Return<Uri>(uri => uri.Host == "foo.bar" ? new TenantInstance() : null);有点臭。
发布于 2012-11-24 15:04:16
我在这里看到三个方面:
null,则必须显式地配置它。因此,仅仅建立
host.WhenToldTo(h => h.GetTenantInstance(Param.Is(新Uri(“http://foo.bar").Return(新TenantInstance());
您还必须设置另一个案例,如下所示:
host.WhenToldTo(h => h.GetTenantInstance(Param.Matches(x =>!x.Equals(新Uri(“http://foo.bar") .Return((TenantInstance)null);
我发现您的“解决方案”比这两个设置更优雅。Param.Is()会出现异常,这是Machine.Fakes的一个缺点。我看不出有什么理由不应该这样做。我会在某个时候纠正这一点,让你知道。https://stackoverflow.com/questions/13516849
复制相似问题