[英]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.