簡體   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