J'ai un test qui passe si je ne suis pas mise au point le test:Comment éviter les échecs du test pendant le débogage?
Snippet:
using (var reader = dbUtility.ExecuteReader(cmd))
{
if (reader != null)
{
while (reader.Read())
{
Dans mon Arrangez pas, je mis en place un talon qui renverra une la valeur de ligne d'informations. La partie qui se casse pendant le débogage est l'appel reader.Read(). Le débogueur apparaît à mange l'appel read() et l'évalue à false, n'entrant jamais dans la portée du bloc while {}.
Alors, que se passe-t-il ici? Y a-t-il un moyen de refactoriser cela?
Sur demande de Skeet:
test de travail complet:
[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);
}
code à l'essai:
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;
}
}
L'assembly que vous avez créé avec la configuration de débogage fonctionne-t-il si vous l'exécutez sans le débogueur connecté? – weiqure
Je pense que cela a quelque chose à voir avec la configuration. Vérifiez votre config. –
Merci pour les commentaires, @Pk ne sais pas quoi vérifier, tout semble bien. @weiqure Vous ne pouvez pas passer à travers sans le débogueur joint, ce qui est une condition du scénario que je décris. Tester PASSES lorsque je ne débogue pas. –