2012-11-16 44 views
3

我想了解更多關於單元測試,使用開箱即用功能(我相信它是MSTest.exe),和微軟假貨(存根和墊片)。微軟在ac#方法中用SQL代碼僞造(墊片和/或存根)

我正在使用Visual Studio 2012 Ultimate和.Net 4.5 Framework。

鑑於下面的代碼調用存儲過程(SQL服務器),它返回一個單一的輸出值(爲簡單起見):

public string GetSomeDatabaseValue() 
{ 
    string someValue = String.Empty; 

    SqlParameter paramater = new SqlParameter(); 
    paramater.ParameterName = "@SomeParameter"; 
    paramater.Direction = ParameterDirection.Output; 
    paramater.SqlDbType = SqlDbType.NVarChar; 
    paramater.Size = 50; 

    try 
    { 
     using(SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connection"].ConnectionString)) 
     { 
      using (SqlCommand command = new SqlCommand()) 
      { 
       command.Connection = connection; 
       command.CommandType = System.Data.CommandType.StoredProcedure; 
       command.CommandText = "SomeStoredProcedure"; 
       command.Parameters.Add(paramater); 

       connection.Open(); 
       command.ExecuteNonQuery(); 

       if (command.Parameters["@SomeParameter"] != null) 
       { 
        someValue= Convert.ToString(command.Parameters["@SomeParameter"].Value); 
       } 
      } 
     } 
    } 
    catch(SqlException) 
    { 
     throw; 
    } 

    return someValue; 
} 
  1. 能把它使用墊片和/或存根使得待測試的輸出值可以設置爲一個特定的值?
  2. 如果是這樣怎麼樣?
  3. 我是否應該使用單元測試呢?

我已經關注了this tutorial並設法理解並適應了一週中的某一天。

我正在等待VS2012數據庫單元測試功能在2012年底(或恢復)作爲MS員工has commented可用,以便可以對數據庫進行單獨測試。

回答

0

Microsoft Fakes不是測試此代碼的合適工具。改爲創建一個集成測試。在此測試中,使用SQL服務器的本地實例,顯式創建存儲過程期望在數據庫中找到的數據,調用存儲過程並驗證其結果。回滾事務或手動刪除數據庫中的數據以確保它不會影響其他測試。

+1

爲什麼不呢?通過Shimming'command.ExecuteNonQuery();'你可以測試相當多的這種方法和錯誤處理,而不需要訪問數據庫。 – jessehouwing

+1

可能想要填充'connection.Open()'以及。它不會使這個方法易於測試或者其他任何方法,但這是一種開始的方式。 – jessehouwing

+0

方法本身的邏輯很少。這主要是圍繞存儲過程進行的。你可以用Shims測試它嗎?是。測試會有價值嗎?在我看來,沒有。我要麼直接單元測試存儲過程,要麼集成測試包裝器方法作爲代理。 –