2013-03-23 60 views
0

我的代碼需要從文件輸入。如果我必須爲它編寫NUnit測試用例,是否必須更改我的代碼並從測試用例而不是文件中獲取輸入,或者是否有可能不必更改我的代碼。NUnit的測試用例的輸入問題

幫助請。

下面給出的是的,我必須測試的功能之一。

public void CLEAN_Discipline(string disp) 
    { 
     //////////////////////////////////////////////////////SQL CONNECTION//////////////////////////////////////////////// 

     string sqlconnectionString = "server=localhost;" + "database=fastdata;" + "uid=dwh;" + "password=dwh;"; 
     MySqlConnection cnMySQL = new MySqlConnection(sqlconnectionString); 
     MySqlCommand cmdMySQL = cnMySQL.CreateCommand(); 
     cmdMySQL.CommandText = "Select * from single"; 
     MySqlDataReader reader; 
     String query; 
     MySqlCommand cmd2; 
     cnMySQL.Open(); 
     reader = cmdMySQL.ExecuteReader(); 


     while (reader.Read()) 
     { 
      string disp = reader["Discipline"].ToString(); 

      disp = disp.ToUpper(); 
      disp = disp.Replace("MS", ""); 
      disp = disp.Replace("-", ""); 
      disp = disp.Replace(" ", ""); 

      string roll = reader["RollNumber"].ToString(); 


      MySqlConnection cnMySQL2 = new MySqlConnection(sqlconnectionString); 
      cnMySQL2.Open(); 
      query = "UPDATE single SET Discipline = ('" + disp + "') where RollNumber = '" + roll + "' "; 
      cmd2 = new MySqlCommand(query, cnMySQL2); 
      cmd2.ExecuteNonQuery(); 
      cnMySQL2.Close(); 
     } 
     cnMySQL.Close(); 

     cnMySQL.Open(); 
     reader = cmdMySQL.ExecuteReader(); 
     while (reader.Read()) 
     { 
      string roll = reader["RollNumber"].ToString(); 
      string disp = reader["Discipline"].ToString(); 
      string degree = reader["Degree"].ToString(); 
      if (degree == "MS") 
      { 
       if (roll[0] == 'I') 
       { 
        if (disp != "CS" && disp != "SPM" && disp != "") 
        { 
         disp = "UNKNOWN"; 
        } 
       } 
       else if (roll[0] == 'K') 
       { 
        if (disp != "CS" && disp != "SPM" && disp != "TC" && disp != "NW") 
        { 
         disp = "UNKNOWN"; 
        } 
       } 
       else if (roll[0] == 'P') 
       { 
        if (disp != "CS" && disp != "TC") 
        { 
         disp = "UNKNOWN"; 
        } 
       } 
       else if (roll[0] == 'L') 
       { 
        if (disp != "CS" && disp != "SPM" && disp != "TC" && disp != "NW") 
        { 
         disp = "UNKNOWN"; 
        } 
       } 
      } 
      if (disp == "UNKNOWN") 
      { 
       MySqlConnection cnMySQL2 = new MySqlConnection(sqlconnectionString); 
       cnMySQL2.Open(); 
       query = "UPDATE single SET Discipline = ('" + disp + "') where RollNumber = '" + roll + "' "; 
       cmd2 = new MySqlCommand(query, cnMySQL2); 
       cmd2.ExecuteNonQuery(); 
       cnMySQL2.Close(); 
      } 

     } 
    } 

回答

0

我建議你把你的函數分解成更小的函數,這樣你纔可以測試包含邏輯的部分。

你的情況,也許你應該提取代替你要檢查到,需要一個字符串函數的字符串方面的邏輯。然後,您可以測試該函數,而不需要其他所有依賴項(讀取和寫入數據庫)。

Working Effectively with Legacy Code由邁克爾羽毛是說明如何在代碼中創建接縫,允許用於測試的巨大資源。

+0

是否有可能,我不分手我的功能,還測試了嗎?而無需更改文件輸入。 – ZZZ 2013-03-23 17:06:25

+0

我不這麼認爲 – 2013-03-23 17:10:24