我有通行證,如果我沒有調試測試的測試:如何避免在調試過程中失敗測試?
段:
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;
}
}
如果在沒有附加調試器的情況下運行它,那麼使用「調試」配置創建的程序集是否可以正常工作? – weiqure 2009-08-03 16:27:13
我認爲這與配置有關。檢查你的配置。 – 2009-08-03 16:35:51
感謝您的意見, @Pk不知道要檢查什麼,一切都很好。 @weiqure如果沒有附加調試器,則無法步入,這是我描述的場景的一個條件。測試通過,當我不調試。 – 2009-08-03 16:59:26