私の並べ替えステップでデバッグ中にテストが失敗するのを避けるには?</p> <p>スニペット::私はテストをデバッグするわけではない場合は合格テストしてい
using (var reader = dbUtility.ExecuteReader(cmd))
{
if (reader != null)
{
while (reader.Read())
{
を、私は1行の情報の価値を返しますスタブを設定します。デバッグ中にのみ壊れる部分は、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
これはconfigと関係があると思います。設定を確認してください。 –
コメントのおかげで、 @Pkは何を確認するか分からない、すべてがうまく見えます。 @weiqureデバッガを接続せずにステップスルーすることはできません。これは私が記述しているシナリオの条件です。私がデバッグしていないときにパスをテストしてください。 –