これまで手動でしかテストされていなかった成熟したアプリケーションに、自動化された統合テストを導入しています。
アプリは Windows ベースで、MySQL データベースと通信します。
発生するデータベース トランザクションに関して、テストを互いに独立した状態に保つための最良の方法 (推奨されるツールの詳細を含む) は何ですか?
(この特定の目的のためにアプリ ソースを変更することはできません。)
これまで手動でしかテストされていなかった成熟したアプリケーションに、自動化された統合テストを導入しています。
アプリは Windows ベースで、MySQL データベースと通信します。
発生するデータベース トランザクションに関して、テストを互いに独立した状態に保つための最良の方法 (推奨されるツールの詳細を含む) は何ですか?
(この特定の目的のためにアプリ ソースを変更することはできません。)
結果をどのように検証していますか?
結果を得るために DB にクエリを実行する必要がある場合 (そしておそらくそのように思われます)、私は Kris K に同意します。ただし、すべてのスイートだけでなく、すべてのテスト ケースの後に DB を再構築するよう努めます。
これにより、危険な相互作用テストを回避できます
ツールに関しては、CppUnitをお勧めします。実際には単体テストを行っているわけではありませんが、テスト フィクスチャを自動的にセットアップするために必要なセットアップと破棄のフレームワークが xUnit フレームワークによって提供されるため、問題にはなりません。
データベースのサイズや人口などによっては、明らかにこれによりテストの実行が遅くなる可能性があります。データベースを削除/再構築するのではなく、接続/切断できる場合があります。
さらなる研究に興味がある場合は、XUnit Test Patternsをチェックしてください。それは素晴らしい本であり、この種のことのための良いウェブサイトです.
そして、自動化してくれてありがとう:)
ニック
各テストスイートなどのデータベースをダンプ/復元できます。これを自動化しているため、セットアップ/ティアダウン機能に何かがある可能性があります。
以前は、データベース関連の単体テスト クラスの SetUp 関数でデータベースを復元していました。このようにして、各テストが同じ条件下で実行されることが保証されました。
テスト用に特別なデータベース コンテンツを準備することを検討してください。つまり、現在の製品バージョンよりも少ないデータで (復元時間を合理的に保つため)。
このようなテストに最適な環境は、VMWare または同等の環境であると私は信じています。データベース、トランザクション ログなどを設定し、データベースと構成のすべてを記録します。次に再テストするには、イメージとデータベースをリロードしてテストを開始します。これには、システムの変更に伴うテストのメンテナンスが引き続き必要ですが、少なくともテストは反復可能です。これは、統合テストにおける最大の課題の 1 つです。
テストの自動化には多くの人が Perl を使用していますが、Perl プログラムは Topsy のように成長し、複雑になることがわかっています。一連の構造化されたテストを作成しようとしている場合は、Python をスクリプト言語 (C++ テストを実行) として使用する価値があります。
@ Kris K.が言うように、各テストの間にデータベースをダンプして復元するのがおそらく最善の方法です。
アプリの外部でテストを行うことを検討しているため、より優れたテスト ツールを利用できる言語でテスト フレームワークを構築することを検討します。
テスト フレームワークを Java で構築した場合は、JUnitを利用でき、場合によってはFitNesseのようなものを利用することもできます。
テスト対象のアプリケーションが C++ であるという理由だけで、自動化されたテストに C++ を使用しなければならないことを意味するとは思わないでください。