2009-08-03 82 views
0

我有通行證,如果我沒有調試測試的測試:如何避免在調試過程中失敗測試?

段:

using (var reader = dbUtility.ExecuteReader(cmd)) 
{ 
    if (reader != null) 
    { 
     while (reader.Read()) 
     { 

在我的安排一步,我成立了一個存根,將返回一個信息行的價值。在調試期間中斷的部分是reader.Read()調用。調試器出現吃了read()調用並且評估結果爲false,永遠不會進入while塊的範圍。

那麼這裏發生了什麼?有沒有辦法重構這個?

通過從飛碟雙向的請求:

全面工作測試:

下測試
[Test] 
public void StateValueTest() 
{ 
    // Borrowed from Phil Haack 
    StubResultSet resultSet 
     = new StubResultSet("stateid", "stateabbr", "statename", "regionid"); 
    resultSet.AddRow(1, "CA", "California", 0); 
    StubDataReader mockReader = new StubDataReader(resultSet); 

    // Using Kzu's Moq framework <3 
    var mockDbUtil = new Mock<IDbUtility>(); 
    mockDbUtil.Setup(conn => conn.GetSqlConnection()); 
    mockDbUtil.Setup(cmd => cmd.CreateSqlProcCommand(It.Is<string>(procName => procName == "spGetStates"), It.IsAny<SqlConnection>())); 
    mockDbUtil.Setup(exec => exec.ExecuteReader(It.IsAny<SqlCommand>())).Returns(mockReader); 

    State.dbUtility = mockDbUtil.Object; 

    List<State> states = State.States; 

    mockDbUtil.VerifyAll(); 

    Assert.Less(0, states.Count); 
} 

代碼:

public static List<State> States 
{ 
    get 
    { 
     List<State> results = new List<State>(); 

     using (var conn = dbUtility.GetSqlConnection()) 
     { 
      using (var cmd = dbUtility.CreateSqlProcCommand("spGetStates", conn)) 
      { 
       using (var reader = dbUtility.ExecuteReader(cmd)) 
       { 
        if (reader != null) 
        { 
         while (reader.Read()) 
         { 
          State state = new State 
          { 
           stateId = ConversionUtility.ConvertInt(reader["stateid"]), 
           stateAbbr = ConversionUtility.ConvertString(reader["stateabbr"]), 
           stateName = ConversionUtility.ConvertString(reader["statename"]), 
           regionId = ConversionUtility.ConvertInt(reader["regionid"]) 
          }; 
          results.Add(state); 
         } 
        } 
       } 
      } 
     } 

     return results; 
    } 
} 
+0

如果在沒有附加調試器的情況下運行它,那麼使用「調試」配置創建的程序集是否可以正常工作? – weiqure 2009-08-03 16:27:13

+0

我認爲這與配置有關。檢查你的配置。 – 2009-08-03 16:35:51

+0

感謝您的意見, @Pk不知道要檢查什麼,一切都很好。 @weiqure如果沒有附加調試器,則無法步入,這是我描述的場景的一個條件。測試通過,當我不調試。 – 2009-08-03 16:59:26

回答

1

我的猜測是,在存根的屬性之一在正在執行調試器和吃數據。

確保你所有的屬性獲得者都是無副作用的,並且一切都會很好。

如果不是這樣,請張貼一些代碼 - 理想情況下是一個簡短但完整的程序,可以重現問題。

0

一些猜測:

在調試器下運行時是否包含sql server調試模式?如果使用attach,你可以在啓動調試器時進行修改。我發現這有時可能會在我的sql會話中發揮地獄作用(更不用說減慢它們)。

或者你的模擬工具不喜歡以多線程方式運行? 如果你在有/沒有調試器的情況下自己嘗試一個測試,會發生什麼?