1

これが私のテストシナリオです。

コマンドラインが実行されると、多くの値がデータベース内のさまざまなテーブルに書き込まれます。

複数のコマンドラインオプションと、データベースで検証する多くの値/テーブルがあります。dbの値のチェックを設計するにはどうすればよいですか?

私がこれまでにしたこと-

  • コマンドを実行する

  • dbに接続します

  • コマンドに固有のクエリを実行します(これは、検索する必要のあるテーブルのコマンドに非常に固有です)

  • データセットから返されたチェックif dt[row][col]="value i expect"

ここでの利点は、フレームワークの一部として記述しなければならないコードが少ないことです。これの欠点は、各テストを開発するときに、合理化されていないコードを追加する必要があり、列名が間違っている場合があることです。

だから私はチェックをより合理化するかどうかを見ようとしています。公開されたプロパティとして列を持つクラス(テーブル用)を宣言するようなものです。このようにして、少なくとも列名を間違えることはありません。

  1. これは最も単純なアプローチですか(長期的には、より再利用可能なコードを記述したい)。そうでない場合、どのような最善の方法がありますか?
  2. テーブル/列の値をdbからac#プロジェクトファイルに(クラス/コードとして)エクスポートして、すべてをコードに再度入れる必要がないようにする簡単な方法はありますか?

詳細が不明な場合、または詳細についてもう少し詳しく説明したい場合は、お知らせください。

見てくれてありがとう。

4

1 に答える 1

1

この問題の標準的なアプローチはわかりませんが、いくつかのアイデアを提供します。

私は通常、コンパイル時のチェックを利用するためにテーブルを表すクラスを作成していることに気付くので、それは良い方法だと思います。Linq-to-SQLを調べたいと思うかもしれません-私はそれがあなたのためにこれの多くをすることができると思います。私は、C#プロジェクトでも、RubyでActiveRecordを使用することがあります。これは、ActiveRecordを使用した開発が非常に速いためです。

または、テストをテキストファイルに入れることもできます。

Command: 
command to execute

Expected Data:
SELECT column FROM table;
row name, column name, expected data
row name, column name, expected data
row name, column name, expected data

Expected Data:
SELECT column FROM table;
row name, column name, expected data
row name, column name, expected data

次に、ファイルをロードして解析し、コマンドを実行して結果を比較するための小さなコードを記述します。これは、テストごとに変化するものだけを除外するので、それがはるかに良くなるかどうかはわかりません。

もう1つのアイデアは、一般的なコードを基本クラスにプルして、さまざまなコードをサブクラスに保持することです。この設計は、テンプレートメソッドパターンに従います。

class MyTest : CommandLineTest {
  public String Command() { return "Command to execute"; }
  public String DataRetrievalCommand() { return "SELECT column FROM table"; }

  public DataResult[] ExpectedData() {
    return [ new DataResult("column", "row", "value"), ...];
  }
}

スーパークラスはこれらのメソッドを使用してコマンドと値を取得しますが、実際のすべての作業を実行するのはスーパークラスです。テキストファイルと同様のアイデアですが、テスト仕様はコードに保持されます。

これが役立つか、少なくともいくつかのアイデアが流れることを願っています。

于 2013-01-03T21:12:46.160 に答える