簡體   English   中英

如何在C#中模擬基類屬性或方法

[英]How to Mock Base Class Property or Method in C#

我在Nunit測試用例中無緣無故地在Internet上瀏覽了模擬基類成員,並最終決定要求此廢料到堆棧溢出社區。

下面的代碼片段在我的應用程序中有場景。 我要為BankIntegrationController類編寫單元測試,並且我想對存根數據或IsValid屬性和Print方法進行模擬。

框架:Moq,Nunit

public class CController : IController
{
     public bool IsValid {get;set;}

     public string Print()
     {
            return  // some stuff here;
     }
}

public class BankIntegrationController : CController, IBankIntegration
{
    public object Show()
    {
       if(this.IsValid)
       {
          var somevar = this.Print();
       }

       return; //some object
    }
}

您無需嘲笑任何東西。 只需在調用Show之前設置屬性:

[Fact]
public void Show_Valid()
{
    var controller = new BankIntegrationController { Valid = true };
    // Any other set up here...
    var result = controller.Show();
    // Assertions about the result
}

[Fact]
public void Show_Invalid()
{
    var controller = new BankIntegrationController { Valid = false };
    // Any other set up here...
    var result = controller.Show();
    // Assertions about the result
}

嘲諷的是,當你想指定的依賴將如何表現在特定的場景中真正有價值的技術(特別是當你想驗證你的代碼是如何與它進行交互),但在這種情況下,你沒有任何依賴關系(你已經向我們展示了)。 我觀察到很多開發人員在三種情況下不必要地使用了模擬:

  • 當不涉及任何依賴項(或其他抽象行為)時,例如這種情況
  • 手寫的偽造實現方式會導致更簡單的測試
  • 現有的具體實現將更易於使用。 (例如,您幾乎不需要模擬IList<T> -只需在測試中傳入List<T> 。)

暫無
暫無

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

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