我是单元测试的新手,对我来说听起来很容易让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:对象引用未设置为 对象的实例。
答案 0 :(得分:2)
如今,NSubsitute拥有调用ReturnsNull
或表达式.Returns(l => null)
的方法
https://github.com/nsubstitute/NSubstitute/pull/181
我认为这个话题应该由主持人结束
答案 1 :(得分:0)
我发现问题是我使用的是实际的“广告系列”而不是界面,所以NSubstitute正在使用实际的类:(
NSubstitute设计用于接口。
因此,在这种情况下,我没有使用NSubstitute,而是为我的班级创建了一个假对象。
答案 2 :(得分:0)
我遇到了类似问题,并且在解决方案下方找到了
_campaigns = Substitute.For<IOptions<Campaigns>>();
_campaigns.Get(Arg.Any<string>()).ReturnsForAnyArgs(i => null);
此外,您可以使用.Returns(i => null) or .ReturnsNull()
来为_campaigns.Get()
方法返回空值