Dies ist ein Abschnitt den Sie hoffentlich nie lesen müssen. Er
erklärt detailliert, wie implizite Referenzen von 'Prozeduren'
und 'Komponenten' bei der Wiedergabe von Tests aufgelöst
werden. Wenn Sie diesen Abschnitt doch lesen müssen, ist das ein
Zeichen dafür, dass die Include Hierarchie Ihrer Testsuiten zu
kompliziert geworden ist und Sie diese eventuell vereinfachen
sollten.
Es gibt im wesentlichen zwei Fälle, in denen QF-Test implizit
Referenzen in anderen Testsuiten auflöst, nämlich immer wenn die
angeforderte 'Prozedur' oder 'Komponente' in der aktuellen
Suite nicht gefunden wird und
-
Die Suite andere Testsuiten über das Attribut
'Inkludierte Dateien' des 'Testsuite' Knotens
einbindet. QF-Test durchsucht dann diese Testsuiten in der
angegebenen Reihenfolge.
-
Diese Testsuite (genauer gesagt eine ihrer 'Prozeduren') von
einer anderen Testsuite aufgerufen wurde. QF-Test sucht dann auch in
der aufrufenden Suite nach einem passenden Knoten.
Die ganze Sache wird kompliziert, wenn (möglicherweise indirekte)
'Prozeduraufrufe' und (möglicherweise indirekte, evtl. sogar
rekursive) Includes kombiniert werden. Die folgende detaillierte
Aufstellung des Suchalgorithmus wird Ihnen hoffentlich helfen,
Probleme mit inkludierten Dateien zu lösen.
-
Wann immer ein Testlauf die aktuelle Suite verlässt, um mit einer
'Prozedur' oder einer 'Komponente' in einer anderen
Testsuite fortzufahren, wird die andere Suite zur aktuellen Suite.
Dabei geschehen zwei Dinge: Die alte Suite wird auf den
Aufrufstapel gelegt und die Variablen der neuen Suite
werden auf den Sekundärstapel für Variablendefinitionen gelegt
(vgl. Kapitel 6), so dass sie stärker
binden, als die Variablendefinitionen der alten Suite. Im
Protokoll wird dieser Prozess durch einen Testsuite
Wechsel Knoten festgehalten, der alle Knoten des Testlaufs
außerhalb der alten Suite enthält.
-
Jede Suche startet in der aktuellen Suite und geht dann von oben
nach unten durch den Aufrufstapel weiter. Beispiel: Suite A ruft
Suite B auf, die Suite C aufruft. Dann wird zunächst C, dann B,
dann A durchsucht.
-
Includes haben Vorrang vor dem Aufrufstapel. Das bedeutet, dass
bei der Suche in der aktuellen Suite oder den Testsuiten auf dem
Aufrufstapel bei jedem Schritt die inkludierten Dateien durchsucht
werden, bevor mit der nächsten Suite auf dem Aufrufstapel
fortgefahren wird. Beispiel: Suite A ruft Suite B auf, welche
Suite C einbindet. A ist auf dem Aufrufstapel und B ist die
aktuelle Suite. Dann wird zunächst B, dann C, dann A durchsucht.
-
Im Fall mehrfacher, ggf. indirekter Includes wird die Suche
"depth-first", d.h. zuerst in die Tiefe gehend durchgeführt. Dabei
wird die Reihenfolge der Includes beachtet. Beispiel. Suite A
bindet Testsuiten B und C ein, Suite B bindet Suite D ein. Dann wird
zunächst A, dann B, dann D und dann C durchsucht.
-
Wird eine 'Prozedur' in einer (evtl. indirekt) eingebundenen
Suite gefunden (im Gegensatz zu einer Suite auf dem Aufrufstapel),
findet der Wechsel von der aktuellen zur neuen aktuellen Suite
nicht in einem Schritt statt. Für diese Erklärung brauchen wir von
Anfang an ein Beispiel: Sagen wir Suite A ruft Suite B auf und A
bindet Suite C ein. B ruft eine 'Prozedur' auf, die (auf dem
Umweg über A) in C gefunden wird. Anstatt direkt von B zu C zu
wechseln, wird zunächst A zur aktuellen Suite und dann B. Dadurch
landet A noch einmal über B auf dem Aufrufstapel und die
Variablendefinitionen von A werden über die von B auf den
Sekundärstapel gelegt. Die Argumentation hierfür ist folgende:
Suite C, welche jetzt die aktuelle Suite ist, "ist näher an" Suite
A, welche C einbindet, als an Suite B, die lediglich von A
aufgerufen wurde. Man könnte auch sagen, dass Testsuite und
Include Datei eine Art Einheit bilden, so dass aus der Sicht von B
die Testsuiten A und C immer wie eine einzelne Testsuite aussehen,
solange B nicht explizit C aufruft.
-
Das war es, bis auf ein kleines Detail: Während der Suche überprüft
QF-Test jede Testsuite höchstens einmal. Eine zweiter Durchgang wäre
ohnehin sinnlos, aber es handelt sich hierbei nicht nur um eine
Optimierung, da dadurch Probleme mit rekursiven Includes vermieden
werden, wenn z.B. Suite A Suite B einbindet und umgekehrt.
Sollten Sie wirklich ein Problem haben, herauszufinden wie, warum
oder warum nicht eine bestimmte 'Prozedur' oder
'Komponente' ermittelt wurde, sollten Sie als erstes einen
Blick auf das Protokoll werfen. Es zeigt Ihnen genau, welche Testsuiten
aktuell sind und welche Variablenexpansionen stattgefunden haben.