2009-08-03 79 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会话中发挥地狱作用(更不用说减慢它们)。

或者你的模拟工具不喜欢以多线程方式运行? 如果你在有/没有调试器的情况下自己尝试一个测试,会发生什么?