CobolUnit
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
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

