web-dev-qa-db-ja.com

コードのチャンクが両方のアプリとテストで使用されるアプリケーションの開発

私はPHPでWebアプリを開発しています。そこでは、開発しているコードの一部がテストでも使用されます。これを処理する方法がわかりません。 。問題のコードは、eBayのsoap/xmlAPIと通信するための抽象化です。

次のことが理にかなっていることを願っています...別の長い質問をお詫びします!!

具体的には、eBayプロセスを自動化するGUIを備えたeBay管理システムを作成しています。私はテスト駆動開発を使用していますが、最初の受け入れテストでこの問題が浮き彫りになりました。

私の最初の機能は、ユーザーに注文のリストを表示します。そして、テストは最初にEbayのAPIを使用して、eBayのサンドボックスにオークションをアップロードし、次にテスト顧客を使用して、彼に代わってアイテムを購入し、最後に、私のソフトウェアのユーザーがGUIでその購入したアイテムを見るかどうかをテストします。 (これは、eBayのAPIから注文履歴を取得することでアプリが実行します。

最初は、eBayと対話するためのオブジェクト指向APIをアプリに提供するオブジェクトのセットを作成し、これをアプリケーションコードの一部として使用するため、特に再利用することはできませんでした。または、少なくとも、優れたOO原則を除いて、実際にはどのような方法でもパッケージ化されていません。しかし、この計画を続行すると、テストスクリプトはソースコードを「借用」する必要があります。テストを行い、コードのeBay部分に機能を追加します。これは、部分的に重複し、他の部分では重複しないため、テストでのみ使用されます(eBay認証などは、アプリとテストの一般的な要件です。ただし、少なくとも最初は他のAPI呼び出しは重複しません)。この考えに従うと、問題は、テストのみが使用するeBayコードの部分をどのように処理するかがわからないことです。unit/を作成する必要があります。それらの統合テストは、受け入れ/統合アプリのテストでのみ使用されますか?または、テストでこれらのテストのみのeBayモジュール機能を使用して、アプリのみのeBayモジュール機能をテストするという行為は、十分なテストとして機能するのに十分でしょうか?アプリケーションでテストのみのeBayモジュール機能を使用することにした場合はどうなりますか?

私はeBayコードを完全に別のプロジェクトに抽出することを検討していました(たとえば、composerを使用して、別のリポジトリに配置する)。次に、最初にすべてをテストディレクトリにインポートし、アプリのソースディレクトリに複製します。次に、必要に応じて機能を追加し(テストまたはアプリによって)、eBayモジュールのすべての側面を均等にテストします。一部の側面はアプリでのみ使用され、他の側面はアプリのテストでのみ使用されます。しかし、それでも同じ問題が当てはまると思います!!モジュールのテストでは、モジュールの他の部分でテストを実行するために、モジュールの一部を使用する必要があります。

1
CL22

かなり古典的なテストシナリオのようです。解決策は、ebayに対する統合テストによって両方のebay抽象化をテストすることです。すべてのテストが遅くなるため、どこでもこれを実行したくないので、最小限に抑えてください。

抽象化が機能することがかなり確実な場合は、コードの残りの部分をテストするときに、抽象化をモックに置き換えることができます。次に、モックで正しいメソッドが呼び出されたと主張し、それを1日と呼びます。

1