0
以下のサンプルメソッドがあり、テーブルが占有されているかどうかがチェックされます。ユニットテストを行うのは初めてのことですが、単体テストは単なるコードであり、データベースに対して実行されたアクションはすべて嘲笑されなければならないことをお読みください。そうでなければ、統合テストになります。誰かが私を正しい方向に向けることができれば、私はこれを嘲笑する方法についてはあまりよく分かりません。たとえば、あなたがあなたのクラスが実装すべきインタフェースを作成する必要がありますユニットテストのためのメソッドをモックするためにMS Accessデータベースに接続するメソッドをモックする方法
public bool isTableOccupied(string tableID)
{
bool tableOccupied = false;
try
{
connection.Open();
using (OleDbCommand command = new OleDbCommand())
{
command.Connection = connection;
command.CommandText = "SELECT [Occupied] FROM [Table] WHERE [TableID] [email protected]";
command.Parameters.AddRange(new OleDbParameter[] {
new OleDbParameter("@TableID", tableID)
});
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read())
{
if (reader["Occupied"].ToString() == "True")
{
tableOccupied = true;
}
}
}
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error " + ex);
}
return tableOccupied;
}
このメソッドが他のメソッドとやり取りしない場合、これは価値があると思いますか?だから、戻り値は私が他のメソッドをテストするのを妨げない。私はこの方法の統合テストに直接向かい、ユニットテストをスキップする必要がありますか? – user5467760
私がこのメソッドを嘲笑していると感じるのは、 'bool isTableOccupied(" tableID "){return true}'に変更することだけです。何かありますか? ' – user5467760
これは確かにそれぞれの独自のシナリオに依存します。あなたのケースではそれほど価値はないかもしれませんが、インターフェイスの背後にあるデータアクセスコードを抽象化するのが一般的です。このコードは、あなた自身や他の人のために将来的には保守性とテスト可能性が高くなります。真実を返すために私が与えた例は単なる例でした。あなたは、与えられた特定のIDに依存して異なる値を返すようにモックを設定できます。私が言うように、それぞれのシナリオはユニークです。私はそれが価値を付加し、価値のあるものを表明しているかどうかだけをテストすると言うでしょう。しばしば統合テストがより有用になることがあります。 – abrown