テストと検証
このチュートリアルでは、テスト ケースを作成して実行する方法を説明します。
前提条件
開発者トポロジを開発者およびビルト VM を使用して配置する必要があります。
重要な概念
- SysTest フレームワークを使用して単位またはコンポーネントのテスト コードを作成します。
- テストの分離
- テスト コードと FormAdaptors を管理するテスト モジュールの作成。
- テスト コードを生成するために Visual Studio に記録しているタスク レコーダーをインポートします。
- ビルド マシンとテスト モジュールを統合します。
SysTest フレームワークを使用して単位またはコンポーネントのテスト コードを作成
新しいテスト ケースを作成して、アプリケーションで機能をテストすることができます。
Visual Studio を管理者としてオープンします。
On the ファイル メニューで、開く>Project/Solution をクリックしてから、デスクトップ フォルダーから FleetManagementソリューションを選択します。 ソリューション ファイルが自分のコンピューターにない場合、作成手順は フリート管理サンプル アプリケーションのエンド アンド エンドのシナリオ に記載されています。
ソリューション エクスプローラーで、フリート管理ソリューションを右クリックして追加をポイントしてから新規プロジェクトをクリックします。
作成するプロジェクト タイプとして財務と運用を選択します。
この新しいプロジェクトに FleetManagementUnitTestSample と名前を付け、デスクトップの FleetManagement フォルダー (C:\Users\Public\Desktop\FleetManagement) を場所として指定してから、OK をクリックします。
ソリューション エクスプローラーで、新規プロジェクトを右クリックしてからプロパティをクリックします。
Model プロパティを FleetManagementUnitTests に設定し、OK をクリックします。
FleetManagementUnitTestSample プロジェクトを右クリックして追加をポイントしてから新しい項目をクリックします。
新しい項目の追加ウィンドウで、追加する要素のタイプとしてクラスを選択します。 新しいクラスに FMUnitTestSample と名前を付けてから、追加をクリックします。
新しいクラスのコードの最初の行で、クラスが SysTestCase クラスを拡張していることを示します。
クラスのメソッドを定義する次のコードを追加します。 これらのメソッドは、2 つの追加テストを定義します。
class FMUnitTestSample extends SysTestCase { public void setup() { // Reset the test data to be sure things are clean FMDataHelper::main(null); } [SysTestMethodAttribute] public void testFMTotalsEngine() { FMRental rental; FMTotalsEngine fmTotals; FMRentalTotal fmRentalTotal; FMRentalCharge rentalCharge; FMRentalTotal expectedtotal; str rentalID = '000022'; // Find a known rental rental = FMRental::find(rentalID); // Get the rental charges associated with the rental // Data is seeded randomly, so this will change for each run select sum(ExtendedAmount) from rentalCharge where rentalCharge.RentalId == rental.RentalId; fmTotals = FMTotalsEngine::construct(); fmTotals.calculateRentalVehicleRate(rental); // Get the totals from the engine fmRentalTotal = fmTotals.totals(rental); // Set the expected amount expectedTotal = rental.VehicleRateTotal + rentalCharge.ExtendedAmount; this.assertEquals(expectedTotal,fmRentalTotal); } [SysTestMethodAttribute] public void testFMCarValidateField() { FMCarClass fmCar; fmCar.NumberOfDoors = -1; this.assertFalse(fmCar.validateField(Fieldnum("FMCarClass", "NumberOfDoors"))); fmCar.NumberOfDoors = 4; this.assertTrue(fmCar.validateField(Fieldnum("FMCarClass", "NumberOfDoors"))); } }
新しいクラスを保存します。 保存が完了した後、テスト エクスプローラー に追加 2 つのテスト ケースが表示されます。 ソリューション エクスプローラーで FleetManagementUnitTestSample プロジェクトを右クリックし、ビルド をクリックします。
表示メニューで、テスト エクスプローラーを開きます。
特定のテスト ケースを実行するには、選択したテストの実行をクリックします。
完了した後、テスト エクスプローラーにテストの結果が表示されます。
テストの分離
テストが高い価値を持つためには、信頼できるものでなければなりません。 テストは、他のテストなどの他の要因に関係なく、常に成功または失敗します。 信頼性の低いテストの典型的な原因の 1 つとして、ダウンストリーム テストに影響を与えるデータベースに残されたデータなどのリーク状態があります。 このタイプの問題を回避するには、SysTestTransaction
属性を使用できます。
TestTransactionMode | 説明 |
---|---|
AutoRollback |
既定。 最適な分離が提供されます。 すべてのトランザクションは、SQL セーブ ポイントを使用してロールバックされ、すべてのデータベース ステートメントは、ユーザー接続を含む、メインの接続にルーティングされます。 保持されるデータはありません。 |
LegacyRollback | すべての挿入ステートメントは、クリーンアップ時に追跡および削除されます。 すべての挿入ステートメントは、行ごとにダウングレードされます。 典型的なユース ケースの 1 つは、ユーザー接続または同時実行シナリオをテストする場合です。 この分離レベルは、セットアップ データのクリーンアップをするため、推奨は各テスト メソッドを ttsBegin と ttsAbort でラップすることです。 |
LegacyRollbackWithUpdateTracking | すべての更新、削除、挿入ステートメントは、クリーンアップ中に追跡され、元に戻されます。 すべての挿入、更新、削除ステートメントが行ごとに追跡され、ダウングレードされます。 これは、最も遅い分離レベルです。 |
なし |
デバッグにのみ使用します。 分離を提供しません。 この設定は、テストで作成されたデータを通常のユーザー インターフェイスを使用してナビゲートできるため、一時的にテストをデバッグする場合に役立ちます。 |
例:
[SysTestTransaction(TestTransactionMode::LegacyRollback)]
class MyTestSample extends SysTestCase
テスト コードと FormAdaptors を管理するテスト モジュールの作成
テスト コードをまとめて管理しやすくするためにテスト固有のモジュールを作成しています。
Visual Studio を開き、Dynamics 365>モデル管理>モデルの作成に移動します。
モデル名を入力し、レイヤーを選択し、次に追加詳細を入力します。 テスト モジュールの名前に テスト という語を含めることをお勧めします。 既定のビルド定義は、テスト という単語を含むすべてのテスト モジュールを検出するように設定されています。
このモデルは Application Platform/Foundation からのフォームを保持するため、以下に示すモデルへの参照を追加します。
基本テスト モジュールを配置した後、タスク レコーダーの記録をインポートしてテスト コードを生成することができます。 タスク レコーダーの記録の XML をインポートするとき、FormAdaptors を使用してテスト コードが生成されます。 フォーム アダプターは、フォーム機能をテストするために使用される、強く定型化された API を提供するフォーム上のラッパー クラスです。 組み込みのフォームの各パッケージの事前に生成した FormAdapters を含めました。 テスト モジュールで、テスト コードを実行するヘルパー メソッドがある、パッケージおよび Test Essentials に対応するフォーム アダプタへの参照を追加します。
テスト コードを生成するために Visual Studio に記録しているタスク レコーダーをインポートします。
タスク レコーダーの記録からテスト コードを生成して、ヘッドレス (非 UI) テストを実行することができます。
タスク レコーダーを使用してシナリオを記録します。
Visual Studio にタスク記録をインポートするには、Dynamics 365>アドイン>タスク記録のインポートをクリックします。
タスクの記録をインポート ダイアログで、タスクの記録をインポートするテスト モジュール (ISVTestModule) を選択し、記録している xml ファイルを参照します。
タスクの記録インポート プロセスは、Visual Studio IDE で表示できる SysTestAdapter および FormAdaptor に基づいてテスト コードを生成します。 このステップの一部として生成されるテスト ソース コードをお客様が変更することを予定していません。
テスト コードが生成された後、テスト検出および実行のための Visual Studio オプションを設定します。
- 64 ビット コンピューターを使用する場合は、単体テストを実行し、64 ビット プロセスとしてコード カバレッジ情報を取得できます。
- これを構成するには、テスト>テスト設定>既定のプロセッサ アーキテクチャを選択してから、 X64 を選択します。
- テストの実行エンジンが開き、テスト プロジェクト内のアセンブリをロックする状態が発生した可能性があります。 この場合、たとえば、アセンブリに対する変更を保存することはできません。 これを修正するには、テスト>テスト設定を選択してから、テスト実行エンジンを実行し続けるを選択します。
- Visual Studio IDE で生成されたテスト コードがあるので、テストを検出してローカルで実行します。
メニュー オプションから、テスト>Windows を選択してから、テスト エクスプ ローラーをクリックします。 テスト エクスプローラー ウィンドウが開いた後、テスト コードからテストを検出し、次のように使用可能なすべてのテストを一覧表示します。
テストを選択して 実行>選択して実行 をクリックし、ローカルに配置された環境に対してテストを実行します。
ビルド プロセスのあるテスト モジュールの統合
テスト モジュールがソース管理の一部である場合、ビルド プロセス テンプレートは、名前にテストという単語を含むすべてのテスト モジュールを検出します。 次の図は、Visual Studio codespace の一部としてのビルドとテストの実行を示しています。