繁体   English   中英

NSubstitute返回对象的Null

[英]NSubstitute to return a Null for an object

我是单元测试的新手,在我看来,让NSubstitute能够为方法返回null应该很容易,但是我无法使其正常工作。

我已经尝试过这个应该返回Campaign方法的Get方法

_campaigns = Substitute.For<IOptions<Campaigns>>();
_campaigns.Get(Arg.Any<string>()).Returns(null); 

在生产中,我使用FirstOrDefault()方法返回广告系列对象,如果不存在则返回null。 所以在我的单元测试中,我想测试这种情况,但是我不能用NSubstitute伪造它,因为在编译时出现以下错误:

错误CS0121:以下方法或属性之间的调用不明确:“ SubstituteExtensions.Returns(T,T,params T [])”和“ SubstituteExtensions.Returns(T,Func,params Func [])”

我这样做是为了避免错误:

_campaigns.Get(Arg.Any<string>()).Returns((Campaign)null);

但是然后我在那条线上得到一个执行错误:

System.NullReferenceException:对象引用未设置为对象的实例。

如今NSubsitute具有调用ReturnsNull或expression的方法.Returns(l => null) https://github.com/nsubstitute/NSubstitute/pull/181

我认为这个话题应该由主持人关闭

我有一个类似的问题,发现下面的解决方案

_campaigns = Substitute.For<IOptions<Campaigns>>();
_campaigns.Get(Arg.Any<string>()).ReturnsForAnyArgs(i => null); 

另外,您可以使用.Returns(i => null) or .ReturnsNull()来为_campaigns.Get()方法返回空值。

我发现我使用的是实际类“ Campaigns”而不是接口的问题,所以NSubstitute使用的是实际类:(

NSubstitute设计用于接口。

因此,在这种情况下,我没有使用NSubstitute,而是为类创建了一个假对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM