簡體   English   中英

為什么使用NSubstitue.Arg.Any <string> 在一組單元測試中,導致另一組中的最后一個測試失敗

[英]Why does using NSubstitue.Arg.Any<string> in one group of unit tests cause the last test in another set to fail

我們有一個非常奇怪的錯誤,即使用一組新的UnitTests運行完整的單元測試套件將始終在新部分中最后一次運行測試失敗(對於Unity3D項目使用ReSharper和NUnit)。 但是,單獨運行新集合將通過所有測試。

奇怪的是,更改失敗的單元測試的命名會導致整個套件以看似隨機的方式通過。 我們刪除了世界“ _Multiple”,它似乎一直有效,直到我們添加了一個新測試,並且測試失敗了,但根本沒有單詞“ _Multiple”。 在這一點上,我知道發布的名稱是紅色鯡魚,而不是問題的真正原因。 它還在多台機器上進行了測試,並且始終具有相同的行為。

我們最終通過使用Arg.Any在基本運行的非NSubstitute對象上進行的單元測試套件來運行時縮小了故障的范圍

Assert.That(!string.Equals("Desired Value", Arg.Any<string>()));

一旦發現很明顯我在濫用Arg.Any()函數。

我的問題是,為什么更改函​​數名稱會完全影響測試? 為什么將所有測試重命名為test1(),test2(),test3()等,使每次通過測試時都無法通過更具描述性的名稱?

NSubstitute使用靜態狀態執行可怕的操作以獲取其特定語法。 Arg.xyz調用將參數規范添加到全局隊列,並且在調用替代項后將清除這些參數規范。

我猜想更改測試名稱會導致它們運行順序發生變化,從而導致暴露或隱藏問題。 在一種特定的順序中,將調用替代項,以清除錯誤的Arg.Any<string>()規范,而在另一種順序中,該規范會導致將實際調用視為配置存根值,或者由於不匹配的論點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM