データベースを使用した C++ アプリの自動統合テストという質問は、xUnit フレームワークが統合テストを作成および実行するための優れた方法であることを意味します。xUnit はそのタスクに本当に適していますか? 注意すべき一般的な落とし穴はありますか? 従うべき良いアプローチですか?
JUnit と TestNG は、最初は単体テスト フレームワークですが、統合テストにも使用できます。私にとっては、答えはイエスです。これらは統合テストに適しています。たとえば、サービスのテスト --> ドメイン > 永続性 --> データベース層 (統合テストについては後で説明します)。データベースを含む統合テストを行う際に注意が必要なことの 1 つは、データです。DbUnitなどのツールが役立ち、通常は、各テストを実行する (およびデータベース コンテンツに対してアサートを実行する) 前に、データベースを既知の状態にするために使用されます。もう 1 つの方法は、トランザクションでテストを実行し、テストの最後にトランザクションをロールバックすることです。Spring ではそれを非常に簡単に行うことができます。図書館。いずれにせよ、ベストプラクティスは相互依存のテストをできるだけ避けることです (あなたが提供したリンクに記載されているように)。それらは単なる悪夢です。
より良いアプローチはありますか (HP / 以前の Mercury ツール スイートを購入する可能性を除いて)?
私の知る限り、そのようなツールはエンドツーエンドのテスト ツール、つまり機能テスト ツールです。したがって、統合テスト(私にとっては複数のコンポーネントを一緒にテストすることを意味します)が実際に機能テストを意味する場合(これは完全なユースケースの私の理解です)、次のようなものを見ることをお勧めします:
太字のものに特に注意してください (すべて実際には優れたツールですが、太字のものは優れた自動化機能を提供していると確信しています)。また、HTTP と SOAP は標準であるため (これはもちろん Swing UI テスト ツールには当てはまりません)、これらのツールは実際には Java 固有のものではありません (たとえテスト自体が SoapUI 用に Java/Groovy で記述されていたとしても)。ところで、Selenium は多くのプログラミング言語をサポートしています)。