2010-05-31 45 views
11

最佳做法是什麼? 調用函數,然後返回,如果你測試的東西,或測試的東西,然後調用?是否更好地測試一個函數是否需要在它內部或外部?

我更喜歡功能裏面的測試,因爲它使得更容易查看哪些函數被調用。

例如:

protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
      this.FixURLCosmetics(); 
     } 

private void FixURLCosmetics() 
     { 
      HttpContext context = HttpContext.Current; 
      if (!context.Request.HttpMethod.ToString().Equals("GET", StringComparison.OrdinalIgnoreCase)) 
      { 
       // if not a GET method cancel url cosmetics 
       return; 
      }; 

      string url = context.Request.RawUrl.ToString(); 
      bool doRedirect = false; 

      // remove > default.aspx 
      if (url.EndsWith("/default.aspx", StringComparison.OrdinalIgnoreCase)) 
      { 
       url = url.Substring(0, url.Length - 12); 
       doRedirect = true; 
      } 

      // remove > www 
      if (url.Contains("//www")) 
      { 
       url = url.Replace("//www", "//"); 
       doRedirect = true; 
      } 

      // redirect if necessary 
      if (doRedirect) 
      { 
       context.Response.Redirect(url); 
      } 
     } 

這是有益的:

if (!context.Request.HttpMethod.ToString().Equals("GET", StringComparison.OrdinalIgnoreCase)) 
      { 
       // if not a GET method cancel url cosmetics 
       return; 
      }; 

或者應該是在測試來Application_BeginRequest做?

有什麼更好?

日Thnx

+1

+1我只是在考慮同一個問題...... – 2010-05-31 18:34:26

+0

嘿嘿,我不確定是否發佈它,但我正在開發一個全新的Visual Studio工程,並希望獲得最佳實踐我使用(我現在有時間,所以爲什麼不),所以我認爲是什麼):P和你們喜歡回答問題:) – b0x0rz 2010-05-31 18:36:15

+3

都不 - 你應該在IIS中使用URL重寫模塊。 – Jon 2010-05-31 18:38:40

回答

11

我覺得測試裏面的功能比較好。如果您在函數之外進行測試,則必須在可以調用函數的任何地方進行測試(並且會導致大量重複的代碼)。

把所有東西都放在一個地方然後鋪展到任何地方都比較好。

+0

我忘了考慮從多個地方使用它的情況,所以thnx :) – b0x0rz 2010-05-31 18:37:28

+0

+1我純粹基於代碼重複參數做同樣的事情 - 但是,我經常在函數調用之前發現測試更具可讀性。 – 2010-05-31 18:38:20

6

如果一個方法絕對需要滿足某個條件才能執行它的功能,那麼是的,你應該把驗證放在那個函數中。另一方面,如果你的調用代碼說「只在這組條件下執行這個操作」,那麼調用代碼中的條件更好,因爲下次你想調用這個方法時,你可能不想包含該條件。

+0

+1好推理 – 2010-05-31 18:39:46

+0

不得不重讀幾次,但是這是有道理的! – b0x0rz 2010-05-31 18:44:20

2

在這種情況下,我覺得這個函數的名字意味着在每一種情況下URL都會發生變化。有人可能想要在非GET頁面上撥打FixURLCosmetics,並期望發生某些事情。

我會將FixURLCosmetics重命名爲FixGETURLCosmetics。然後,如果在非GET頁面上調用該異常,則會引發異常。

+0

我喜歡這個想法以及:)很好。謝謝。 – b0x0rz 2010-05-31 18:40:59

0

如果我是你,我會在兩個地方進行測試,在外部和內部,並嘲弄被調用的內部組件(如context.Request調用),以加強內部行爲並嘲諷一些意外的回報以及你的方法如何處理它們。

在這種情況下,easymock等API可以簡化內部組件的嘲諷。

相關問題