2011-01-11 4 views
3

EDIT:NCIEのコメンターのおかげで、私はユニットと自動テストの間の差を取得するので、私は、トピック大規模なアプリケーションの自動テストを開始するにはどうすればよいですか?

Environement名前を変更:私はこの記事を読んで2.0 .NET、SQL Server 2005のは、Windows Server 2003

を:

http://www.codeproject.com/KB/tips/convince.aspx

この男は、あなたがすべてをchangngことなく、既存のアプリに自動化されたテストを追加する方法について話しています。

そして、私はこの記事が本当に素晴らしいと言わなければならないと私はそれを試してみてください!

私たちのシステムはほぼ同じです:すべてのデータはWebサービスからアクセスできるため、簡単に(たとえばsoapuiで)これらのWebサービスに対していくつかの自動テストを行うことができます。

しかし、データベースについてはどうですか?自動化されたテストを行うには、自動化されたテストに対応する正しいデータをデータベースに保存する必要があります。

たとえば、クライアントの名前が空の場合にソフトウェアがエラーを発生するかどうかを確認する自動テストを実行する場合は、データベースに空の名前のクライアントを追加する必要があります。ここ

は、私はそれを行うことができますどのように考えるかです:

  • それは、このサーバーの日付はそれほど変化したことがないので(IIS、SQL Serverの...)
  • が何かを追加する必要があるすべてのものを使用してサーバーを作成します、データベースが10自動テスト後には大きな混乱になります:私は私のデータベースに私は私の自動テスト

PROBLEMを行う必要があるレコードを追加私の自動テスト

  • に時間を変更する必要はありませんと私はねverはどのレコードがどの自動テスト用であるかを知っています。 考えてみると、すべてのテーブルに「TEST_NAME」列を追加することになりますが、少し気になります。

    このような技術を試したことはありますか?特定のツールを使用しましたか?私の考え方は良いものでしょうか? (または少なくとも良いもの)。

    おかげ

    EDIT:私はので、私は二度同じ過ちをしない理由を知りたいのですが、このスレッドのために2 -1を得ました。

  • +2

    ユニットテスト(実際のデータベースの代わりにMocksとFakesを使用する)と、環境や実際のデータベースに特定のレコードが重く依存しているため、頻繁に壊れるシステムレベルのテストを減らしたいとします。これは、開発の前にテストを最初に書いていないので、あなたのためにもっと挑戦になるでしょう。 Michael Feathersの本「Working Effectively With Legacy Code」の本は、あなたのシナリオに役立ちます。 –

    +5

    @remi - 「ユニットテスト」を「自動テスト」に変更することを検討することもできます。ユニットテストは、データベース、ファイルシステム、ネットワークなどの外部リソースから分離されています。 –

    +0

    @Jeff:ここでは、自分のデータベースではなく、自分のビジネス層(= Webサービス)のみをテストしたいのですが、データベースにテストデータを追加して機能させる必要があります。 @Chris O:オマールが記事で述べたように、ここでは単体テストだけを書くという目標があります。私たちのコードは嘲笑の準備ができていません(そして開発者も)ので、データベースを使用する必要があります。 –

    答えて

    0

    私が考えているより優れた解決策かもしれませんが、別のテストサイクルの準備ですべてのコンテンツを単体テストとパージするために別のデータベースを使用しないでください。

    +0

    それは私が考えていることですが、問題はこのデータベースの管理と、どのユニットテストがレコードにリンクされているかを特定する方法です。 –

    +0

    *自動*テストごとに異なるファイルベースのデータセット。私は過去にdbUnitを持っていました。各テストの開始時に世界を破壊し、必要なデータセットのみを構築します。 http://www.dbunit.org/bestpractices.html#nocleanup * edit:* "unit"を "automated"に変更しました。個人的に私はあなたが「単体テスト」ではなく、「機能」や「統合」のテストであるとは思っていません。 –

    +0

    別のデータベースとのテストは、まだ統合テストです。単体テストの回収は、テストがデータベースへの依存性を壊した場合に発生します。 – MatthewMartin

    1

    ユニットテストがパーシスタンスレイヤーに当たっている場合、実際には統合テストに似た何かをしているかもしれません。単体テスト中にデータベースを抽象化する必要があるので、論理をテストし、実際に永続性媒体ではないようにしてください。これにより、ビジネスレイヤロジックに集中することができます。これは、データレイヤーのアーキテクチャーに依存しているので、これは簡単ではありません。あなたのモック/スタブすることができますし、あなたのユニットテストで次に

    interface IRepository 
    { 
        GetModel(id); 
        SaveModel(model); 
    } 
    

    データ層は、しばしばプッシュの簡単な問題であり、引き出すので、あなたのようなインターフェースにデータ層をabtractことができると言うことができますこのインタフェースを持つデータ層。こうすることで、データベースのスタブに任意の値を返すように指示し、それが発生したときに期待される動作をアセット化するテストを作成できます。

    +0

    単体テストが何であるかは分かりませんでした。私はそれについて多くのことを読んでいますが、実際に私が持っている実際のケースには入っています。だから私は少し話題を変えました。ありがとう –

    0

    テストの各バッチの前にテストデータを生成することができる場合は、次のナンバーを100で割った値からレコードを開始します。したがって、最大レコードが350の場合、400を開始し、上記。あなたのDBが本当に大きくなったら、すべてのものを削除してください。

    関連する問題