Wer testet ist feige! Aber eigentlich macht es doch jeder. Mit dem xUnit Ansatz wurde ein Rahmen geschaffen, welcher abstrakt beschreibt, wie Testsysteme aufgebaut werden können. CobolUnit ist eine Implementation - na klar für Cobol.

CobolUnit ist ein Unit-Test-OpenSourceFramework für die Programmiersprache Cobol. Es basiert hierbei auf der XUnit Architektur für Unit-Test-Frameworks. Es unterstützt hierbei die wichtigsten

  • "Assertions" zum Testen gegen die erwarteten Ergebnisse
  • "fixtures" zum gemeinsamen nutzen der Testdaten for sharing common test data
  • "runner" für das Ablaufen lassen der Tests
  • Beispiel

    Schritt 1 - Definiere die TestSuite

    Zur Definition einer Testsuite sind neben dem Hinzufügen von Testfällen auch optional die Aufnahme von Initialisierungs- und Destroyroutinen möglich. Dies geschieht z.B. zum Auf- und Abbau von Datenbankverbindungen.

         * Test Suite Definition
          program-id. TSRITTER as "TSRITTER".
          
          environment division.
          configuration section.
          
          data division.
          working-storage section.
          
          copy "CBUC0003".
          copy "CBUC0001".
          
          procedure division.
          
          main section.
            perform init
            perform addTestCases
            perform startTestSuite
            goback.
          exit section.
          
          init section.
              call CBU-MAIN using CBU-initialize CBU-MAIN-CALL-INTERFACE
              move "Ritter.biz TestSuite" to CBU-SUITE-NAME
              move "Testsuite für www.ritter.biz" 
                to CBU-SUITE-DESCRIPTION
              move "TSPRE" to CBU-SUITE-SET-UP-PGM
              move SPACE to CBU-SUITE-SET-UP-ARG
              move "TSPOST" to CBU-SUITE-TEAR-DOWN-PGM
              move SPACE to CBU-SUITE-TEAR-DOWN-PGM
              call CBU-MAIN using CBU-add-suite CBU-MAIN-CALL-INTERFACE
          exit section.
          
          addTestCases section.
              move "Cobol TestFall" to CBU-TEST-NAME
              move "Testfall für www.ritter.biz Cobol" 
                to CBU-TEST-DESCRIPTION
              move "TCCURTTR" to CBU-TEST-PROG-NAME
              call CBU-MAIN using CBU-add-test-next 
                                    CBU-MAIN-CALL-INTERFACE
          exit section.
         * Schritt 3 - als Inline codiert 
          startTestSuite section.    
              call CBU-MAIN using CBU-run CBU-MAIN-CALL-INTERFACE
          exit section.
          
          end program TSRITTER.
    
    

    Schritt 2 - Definiere den TestFall

    Der Testfall selbst wird in einem externen Programm definiert.

         * Testfall Definition
          program-id. TCCURTTR as "TCCURTTR".
          
          environment division.
          configuration section.
          
          data division.
          working-storage section.
          copy "CBUC0002".
          
          01 TEST-Expected-Result     pic 9999 value zero.
          01 TEST-Actual-Result       pic 9999 value zero.
          
         * Übergabeparameter für das zu testende Subsystem       
          01 param                      pic 9(4).
          
          linkage section.
          copy "CBUC0000".
          
          procedure division using CBU-ctx.
              
              call "pgm2test" using by reference param
              move 3058 to TEST-Expected-Result
              move param to TEST-Actual-Result                                     
              
              set cbu-assert-equal to true
              set cbu-assert-int to true
              move "EQUALS" to CBU-ASSERT-NAME
              move TEST-Expected-Result to CBU-ASSERT-EXPECTED-INT
              move TEST-Actual-Result to CBU-ASSERT-ACTUAL-INT
              call CBU-ASSERT using CBU-ASSERT-CALL-INTERFACE cbu-ctx 
              goback.
          
          end program TCCURTTR.
    
    

    Optional - Initialisierung und Aufräumen

    Gewisse Arbeiten sind häufig im Vor- und Nachhinein zu einer Testsuite notwendig. Diese können entweder im selben oder wie hier dargestellt in getrennten Programmen durchgeführt werden.

           program-id. TSPRE as "TSPRE".
           environment division.
    configuration section.
           data division.
    working-storage section.
           copy "RDBMSC".
           linkage section.
    copy "CBUC0006.CPY".
    *01 CBU-user-context.
    * 05 User-context-length PIC S9(9) COMP.
    * 05 User-context-data.
    * 10 FILLER PIC X OCCURS 1 TO 32000
    * DEPENDING ON User-context-length.
    procedure division using CBU-SUTD-CALL-INTERFACE
    * CBU-user-context
    .

    set RDBMS-FUNKTION-CONNECT to true
    call "RDBMS" using RDBMS-LINKAGE
    if RDBMS-RC-fehler
    set CBU-SUTD-ERROR to true
    else
    set CBU-SUTD-NO-ERROR to true
    end-if

    goback.
           end program TSPRE.

    Natürlich sollte auch ein Aufräumen nicht fehlen.

           program-id. TSPOST as "TSPOST".
           environment division.
           configuration section.
           data division.
           working-storage section.

           copy "RDBMSC".
           linkage section.
           copy "CBUC0006.CPY".
          *01  CBU-user-context.                                           
          *    05 User-context-length PIC S9(9) COMP.                      
          *    05 User-context-data.                                       
          *       10 FILLER           PIC X OCCURS 1 TO 32000              
          *                 DEPENDING ON User-context-length.              
           procedure division using CBU-SUTD-CALL-INTERFACE
          *                         CBU-user-context
                                    .
                                       
               set RDBMS-FUNKTION-DISCONNECT to true
               call "RDBMS" using RDBMS-LINKAGE
               if RDBMS-RC-fehler
                 set CBU-SUTD-ERROR to true
               else
                 set CBU-SUTD-NO-ERROR to true
               end-if                         
                                   
               goback.
           end program TSPOST.

     

    Schritt 3 - Führe den Test aus

    Siehe Schritt 1 "startTestSuite" section

     

    Weitere Informationen

    1. CobolUnit
    2. OpenCobol