簡體   English   中英

用moq嘲笑時的內部類狀態

[英]internal class state when mocking with moq

我是嘲笑的新手,我剛開始使用最小起訂量。 該工具指出,我們可以使用moq來模擬classes without interfaces 我想知道在進行模擬以保留類的內部狀態時是否可行。 例如:

//define class for mocking
var mock = new Mock<ILoveThisFramework>();

//define
mock.Setup(framework => framework.DownloadExists("2.0.0.0"))
      .Returns(true)
      .AtMostOnce();

//use mocking tools to call methods and return defined results

問題:盡管定義了結果,但內部狀態(例如私有類變量)是否發生了變化? (保持上課狀態嗎?)

我假設您要驗證對象的私有狀態或內部狀態-您的被測單元。

在單元測試中,您無需在意。 私有或內部狀態不是您應該測試的東西。 您可以,但是不可以。 通常,公共API和公共狀態都包含在單元測試中。

已經有關於此主題的一些很好的答案,我將在那里推薦您更多的選擇:

我假設您正在詢問是否在模擬上調用DownloadExists更改了模擬的ILoveThisFramework實例的類狀態。

答案是否定的。 您的基本方法不會被調用,而只會被.Setup()創建的.Setup()版本.Setup()

這里有一篇很長的博客文章詳細介紹了一種從模擬中調用基本方法的方法,這可能就是您想要做的。

但是,由於該對象是模擬對象,因此您通常不必關心其其他屬性以及它們是否設置正確,因為它不是受測試的對象。 如果被測試的對象確實關心ILoveThisFramework上的其他屬性,那么這些屬性也應該被模擬以返回預期的結果,而不依賴於該類的內部ILoveThisFramework是否正常工作。

暫無
暫無

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

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