簡體   English   中英

依賴注入和單元測試 - 靜態輔助方法或私有實例方法

[英]dependecy injection and unit testing - static helper methods or private instance methods

從單元測試和依賴注入的角度來看,在輔助方法方面通常采用的規范是什么?

這是我的示例情況:

public class GoodiesController : Controller
{
   private IMyContext _context;

   public GoodiesController(IMyContext context)
   {
      _context = context
   }

   public async Task<IAction> GetThoseGoodies()
   { 
       if(YouLikeThemThisWay(Request.Path))
        {
           var result = await _context.GoGetThemThisWay()
        } else { }
    }

我的問題是,我最好將YouLikeThemThisWay(string path)作為某個類中的靜態助手或作為私有實例方法嗎? 假設我可能有幾個像YouLikeThemThisWay的喜歡?

這實際上取決於你的YouLikeThemThisWay(string path)方法的作用。 我使用靜態方法的規則如下:

  1. 它是否需要非原始依賴? 如果是這樣,請不要使用靜態。
  2. 它會影響應用程序的狀態嗎? 如果是這樣,請不要使用靜態。
  3. 它是否擴展了您無法在內部訪問的類或類型的功能(IE BCL類或靈活性)? 如果是這樣,請使用靜態擴展!
  4. 它是否會影響單元測試 - 如果讓它們變得更加困難 - 如果我不能模擬例程? 如果不是,那就讓它靜止!
  5. 它會被多種類型或類使用嗎? 如果是這樣,它使它成為更好的靜態候選者!
  6. 例程是否執行某種IO,如調用數據庫或文件系統? 如果是這樣,我不會讓它變得靜止。

基本上,小輔助函數很容易測試,不會影響狀態或通常可以靜態。 如果涉及到狀態,則例程需要您通常會注入的依賴項,或者例程正在進行IO或IPC調用,然后不要使其靜態。

對依賴性問題的一個警告是技術上你可以使用方法注入來處理依賴項,但我喜歡保持簡單。 你的方法可能是靜態的。

重用也是靜力學中的一個重要因素。 如果例程只在一個類中使用,那么靜態化可能毫無意義。 我的大多數靜態方法都存在於任何地方都可以輕松訪問的輔助類中。

編輯:請注意,我通常要求這五條規則中的大部分或全部都支持靜態,以便我甚至考慮制作靜態的東西。

暫無
暫無

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

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