テストの拡張

既に説明したように、テスト ケースは合格となりますが、現在はソース コードに対して意味のあるテストを実行していないため、意味のあるテストを実行するようにテストを拡張します。次のことを行います。
  • 必要なデータ ファイルをプロジェクトに追加する。
  • ファイルを開くようにテスト セットアップを構成する。
  • ファイル内から 2 つの空港を検索してその距離を計算するコードをテスト ケースに追加する。
  • 計算された距離に基づくアサーションをテスト ケースに追加する。
  • ファイルを閉じるようにテスト ティアダウンを構成する。
  1. 元のデータ ファイルを AirportConsoleApplication プロジェクトから TestAirportLinkLibrary プロジェクトにコピーし、アプリケーション構成ファイルを使用して実行時に特定できるようにします。
    1. ソリューション エクスプローラーで、AirportConsoleApplication プロジェクト内の [airports.dat] ファイルを右クリックし、[Copy] を選択します。
    2. プロジェクト名 [TestAirportLinkLibrary] を右クリックし、[Paste] を選択します。

      データ ファイルが単体テスト プロジェクトに追加されます。

    3. データ ファイルを右クリックして [Rename] を選択し、「TestAirportLinkLibrary」と入力して Enter を押します。

      データ ファイルの名前が変更されます。

    4. [TestAirportLinkLibrary.dat] を右クリックし、[Properties] を選択します。
    5. プロパティ ペインで、[Copy to Output Directory] が [Copy if newer] に設定されていることを確認します。

      これにより、ファイルが編集された場合に、常に最新のバージョンが出力ディレクトリにコピーされ、そのバージョンが実行時に使用されるようになります。

    6. ソリューション エクスプローラーで、[TestAirportLinkLibrary] プロジェクトを右クリックし、[Add] をポイントして [New Item] を選択します。
    7. [Application Configuration File] を選択し、[Add] をクリックします。

      構成ファイルがプロジェクトに追加されます。

    8. [Application.config] をダブルクリックします。

      [Application Settings] ダイアログ ボックスが表示されます。

    9. [Name] フィールドに「dd_airports」と入力し、[Value] フィールドに「.\TestAirportLinkLibrary.dat」と入力して、[Set]、[OK] の順にクリックします。
  2. エディターで TestAIRCODE.cbl が開いていることを確認します。
  3. テスト ケースのコードで errormessage という変数を使用するため、作業場所節に次のコードを追加します。
           01 errormessage pic x(200).
  4. MFU-TC-SETUP-PREFIX & TEST-TESTAIRCODE エントリ ポイントにジャンプし、*> Add any other test setup code here というコメント行の後に次のコードを追加します。
               move 4 to lnk-function
               call "AIRCODE" using
                           by value lnk-function
                           by value lnk-airport1
                           by value lnk-airport2
                           by value lnk-prefix-text
                           by reference lnk-rec
                           by reference lnk-distance-result
                           by reference lnk-matched-codes-array
                           by reference lnk-file-status
               end-call
    
               *> did we open the file?
               if lnk-file-status not equal "00"
                   call MFU-ASSERT-FAIL-Z using TEST-TESTAIRCODE & " failed to open file" & x"0"
                   exhibit named lnk-file-status
               end-if

    これは、データ ファイルを開くコードです。ファイルを開けないと失敗となり、ファイル状態が失敗として出力されます。

  5. 次に、MFU-TC-PREFIX & TEST-TESTAIRCODE エントリ ポイントにジャンプし、最初の呼び出し文の前に次のコード行を追加します。
             move 2 to lnk-function
             move "LHR" to lnk-airport1 *> London Heathrow
             move "SEA" to lnk-airport2 *> Seattle
  6. 同じセクション内の *> Verify the outputs here というコメント行の後に次のコードを追加します。
              *> Assertions to check that the correct distance is returned
               if function numval(distance-miles) not equal 4787 
                   string "Incorrect distance in miles returned - " 
                           distance-miles delimited by size
                           x"0" delimited by size
                           into errormessage
                   end-string
                   call MFU-ASSERT-FAIL-Z using errormessage
               end-if
    
               if function numval(distance-km) not equal 4787
                   string "Incorrect distance in kilometers returned - " 
                           distance-km delimited by size
                           x"0" delimited by size
                           into errormessage
                   end-string
                   call MFU-ASSERT-FAIL-Z using errormessage
               end-if

    これは、2 つの空港間の距離の値 (マイルと km) が正しく計算されているかどうかを確認するアサーションです。計算が正しくないと失敗となります。

  7. アサーションの直後に次のコードを追加します。
            exhibit named distance-miles
            exhibit named distance-km

    これは、計算結果を出力ペインに出力するコードです。

  8. 最後に、テスト セットアップ セクションの直後 ($end-region マーカーのすぐ前) にカーソルを移動して「testdown」と入力し、Tab を押して、表示されたレベル 78 項目のリストから [TEST-TESTAIRCODE] を選択します (ここでは 1 つしか表示されません)。

    MFU-TC-TEARDOWN-PREFIX & TEST-TESTAIRCODE エントリ ポイントがプログラムに追加されます。

  9. このセクション内に次のコードを追加します。
               move 5 to lnk-function
               call "AIRCODE" using
                           by value lnk-function
                           by value lnk-airport1
                           by value lnk-airport2
                           by value lnk-prefix-text
                           by reference lnk-rec
                           by reference lnk-distance-result
                           by reference lnk-matched-codes-array
                           by reference lnk-file-status
               end-call
    
               *> did we close the file?
               if lnk-file-status not equal "00"
                   call MFU-ASSERT-FAIL-Z using TEST-TESTAIRCODE & " failed to close file" & x"0"
                   exhibit named lnk-file-status
               end-if

    これは、テスト ケースの実行後にデータ ファイルを閉じるコードです。

  10. テストを実行するには、[Micro Focus Unit Testing] ウィンドウで [Run All] をクリックします。

    テスト ケースが失敗となり、[Test Results] ペインに次のように出力されます。

次の作業では、テスト ケースをデバッグして失敗した理由を調べます。