Hilfe für LibreOffice 24.8
Der Dienst UnitTest bietet ein Framework für die Automatisierung von Komponententests mithilfe der Basic-Sprache, einschließlich der Möglichkeit:
Testfälle in Testsuiten und Komponententests zusammenzufassen.
Setup- und Shutdown-Code zwischen Testfällen zu teilen.
Testergebnisse auf der Konsole zu melden.
Sowohl die Komponententests als auch der zu testende Code müssen in Basic geschrieben werden. Der getestete Code kann Funktionen aufrufen, die in anderen Sprachen geschrieben sind.
Der Dienst UnitTest ist für Python-Skripte nicht verfügbar.
Ein Testfall ist die einzelne Testeinheit. Es prüft auf eine bestimmte Antwort auf einen bestimmten Satz von Eingaben.
Im Dienst UnitTest wird ein Testfall durch ein einzelnes grundlegendes Sub dargestellt, dessen Name mit einem gemeinsamen Präfix beginnt (der Standardwert ist "Test_").
Der Testfall schlägt fehl, wenn eine der Methoden AssertX False zurückgibt.
Eine Testsuite ist eine Sammlung von Testfällen, die gemeinsam ausgeführt werden sollen.
Alle Testfälle einer Testsuite werden in einem einzigen Basic-Modul gespeichert.
Eine Testsuite kann die Methoden SetUp und TearDown implementieren, um Testfälle in ihrem Modul vorzubereiten.
Ein vollständiger Komponententest besteht aus einer Reihe von Testsuiten in derselben Basic-Bibliothek.
Vor der Verwendung des Dienstes UnitTest muss die Bibliothek ScriptForge geladen oder importiert werden:
Rufen Sie den Dienst im einfachen Modus auf, um Funktionen AssertX aufzurufen, ohne die vollständige Hierarchie von Testsuiten und Testfällen aufbauen zu müssen.
Im einfachen Modus wird der Dienst innerhalb des Testfalls aufgerufen, wie im folgenden Beispiel gezeigt:
    Sub SimpleTest
        On Local Error GoTo CatchError
        Dim myTest As Variant
        myTest = CreateScriptService("UnitTest")
        ' Ein paar Dummy-Tests
        myTest.AssertEqual(1 + 1, 2)
        myTest.AssertEqual(1 - 1, 0)
        MsgBox("Alle Tests bestanden")
        Exit Sub
    CatchError:
        myTest.ReportError("Ein Test ist fehlgeschlagen")
    End Sub
  Wenn in diesem Beispiel einer der Aufrufe AssertEqual fehlschlägt, geht der Interpreter zum Label CatchError und meldet den Fehler, indem er die Methode ReportError aufruft.
Beim Aufruf im vollständigen Modus erfolgt die Diensterstellung außerhalb des Testcodes und alle Tests sind in Testfällen und Testsuiten innerhalb einer einzigen Bibliothek organisiert.
Das folgende Beispiel erstellt eine Instanz UnitTest, deren Tests sich innerhalb des aktuellen Dokuments (ThisComponent) in der Bibliothek "Tests" befinden.
    GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
    Dim myUnitTest As Variant
    myUnitTest = CreateScriptService("UnitTest", ThisComponent, "Tests")
  Beachten Sie, dass eine ODS-Datei ein Modul namens "MathUtils" in ihrer Bibliothe "Standard" mit dem folgenden Code enthält:
    ' Code im Modul Standard.MathUtils
    Function Sum(a, b) As Double
        Sum = a + b
    End Function
    
    Function Multiply(a, b) As Double
        Multiply = a * b
    End Function
  Um eine vollständige Testsuite zu erstellen, bedenken Sie, dass eine neue Bibliothek namens "Tests" in der Datei mit einem einzelnen Modul "AllTests" erstellt wird, das den folgenden Code enthält:
    ' Code im Modul Tests.AllTests
    Sub Main()
        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
        Dim test As Variant
        test = CreateScriptService("UnitTest", ThisComponent, "Tests")
        test.RunTest("AllTests")
        test.Dispose()
    End Sub
    
    Sub Setup(test)
        ' Vorbereitungscode wurde vor dem ersten Testfall ausgeführt
        Dim exc As Variant
        exc = CreateScriptService("Exception")
        exc.Console(Modal := False)
    End Sub
    
    Sub TearDown(test)
        ' Optionaler Bereinigungscode, der nach dem letzten Testfall aufgerufen wird
    End Sub
    
    Sub Test_Sum(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Sum(1, 1), 2, "Summe zweier positiver ganzer Zahlen")
        test.AssertEqual(Sum(-10, 20), 10, "Summe negativer und positiver ganzer Zahlen")
        test.AssertEqual(Sum(1.5, 1), 2.5, "Summe von Fließkomma- und ganzzahligen Werten")
        Exit Sub
    CatchError:
        test.ReportError("Methode Summe ist fehlgeschlagen")
    End Sub
    
    Sub Test_Multiply(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Multiply(2, 2), 4, "Produkt zweier positiver ganzer Zahlen")
        test.AssertEqual(Multiply(-4, 2), -8, "Produkt negativer und positiver ganzer Zahlen")
        test.AssertEqual(Multiply(1.5, 3), 4.5, "Produkt von Fließkomma- und ganzzahligen Werten")
        Exit Sub
    CatchError:
        test.ReportError("Methode Produkt ist fehlgeschlagen")
    End Sub
  Die obige Testsuite besteht aus zwei Testfällen Test_Sum und Test_Multiply. Um alle Tests auszuführen, führen Sie einfach die Methode Main aus dem Module "AllTests" aus.
Die Console vom Service Exception wird als Standardausgabe zum Ausgeben von Testergebnissen verwendet. Nachdem Sie das obige Beispiel ausgeführt haben, wird die folgende Ausgabe in der Konsole angezeigt:
    ' RUNTEST ENTER testsuite='Tests.AllTests', pattern='Test_*'
    '   SETUP Tests.AllTests.Setup() ENTER
    '   SETUP Tests.AllTests.Setup() EXIT
    '   TESTCASE Tests.AllTests.Test_Multiply() ENTER
    '   TESTCASE Tests.AllTests.Test_Multiply() EXIT (0,017 sec)
    '   TESTCASE Tests.AllTests.Test_Sum() ENTER
    '   TESTCASE Tests.AllTests.Test_Sum() EXIT (0,016 sec)
    '   TEARDOWN Tests.AllTests.TearDown() ENTER
    '   TEARDOWN Tests.AllTests.TearDown() EXIT
    ' RUNTEST EXIT testsuite='Tests.AllTests' (0,223 sec)
  Wenn eine der Methoden AssertEqual während dieser Tests fehlschlägt, wird der Konsole eine Fehlermeldung hinzugefügt.
| Name | Schreibgeschützt | Typ | Beschreibung | 
|---|---|---|---|
| LongMessage | Nein | Boolean | Wenn auf True (Standard) gesetzt, zeigt die Konsole die Standardnachricht, die an die vom Tester bereitgestellte Nachricht angehängt ist. Bei False wird nur die vom Tester definierte Nachricht verwendet. | 
| ReturnCode | Ja | Integer | Wert, der von RunTest zurückgegeben wird, nachdem der Komponententest abgeschlossen ist. Als nächstes folgt eine Liste möglicher Werte: 0 – Test ohne Fehler beendet oder Test nicht gestartet | 
| Verbose | Nein | Boolean | Wenn auf True gesetzt, werden alle Aussagen in der Konsole gemeldet (fehlschlagend oder nicht). Bei False (Standard) werden nur fehlgeschlagene Aussagen gemeldet. | 
| WhenAssertionFails | Nein | Integer | Definiert, was getan wird, wenn eine Aussage fehlschlägt. Als nächstes folgt eine Liste möglicher Werte: 0 - Fehler ignorieren und Test weiter ausführen | 
Alle Aussagen testen einen oder zwei Ausdrücke, die im Rest dieser Hilfeseite als A und B bezeichnet werden. Sie sind immer die ersten ein oder zwei Argumente in der Methode AssertX.
Alle Methoden AssertX akzeptieren ein Argument message, das eine benutzerdefinierte Nachricht festlegt, die in der Konsole bezüglich der Behauptung gemeldet werden soll. Standardmäßig wird eine leerere Zeichenfolge verwendet. Dieses Argument steht immer an der letzten Stelle der Aussage.
Einige Methoden AssertX akzeptieren auch zusätzliche Argumente, wie unten durch ihre Syntax beschrieben.
Gibt True zurück, wenn A und B numerische Werte sind und bei gegebener relativer Toleranz als nahe beieinander betrachtet werden.
svc.AssertAlmostEqual(a: any, b: any, tolerance: double = 1E-09, message: str = ""): bool
Diese Aussage gibt True zurück, wenn die beiden folgenden Bedingungen erfüllt sind:
A und B können in den Typ Double konvertiert werden.
Die absolute Differenz zwischen A und B dividiert durch den größten absoluten Wert von A oder B ist kleiner als der in tolerance angegebene Wert.
Gibt True zurück, wenn A und B als gleich angesehen werden.
svc.AssertEqual(a: any, b: any, message: str = ""): bool
Wenn A und B Skalare sind, wird True zurückgegeben, wenn:
Beide Ausdrücke haben denselben VarType oder sind beide numerisch.
Boolesche und numerische Werte werden mit dem Operator = verglichen.
Zeichenflogen werden mit der eingebauten Funktion StrComp verglichen. Beim Vergleich wird zwischen Groß- und Kleinschreibung unterschieden.
Datum und Uhrzeit werden sekundengenau verglichen.
Null, Empty und Nothing sind nicht gleich, aber AssertEqual(Nothing, Nothing) gibt True zurück.
UNO-Objekte werden mit der eingebauten Methode EqualUnoObjects verglichen.
Beachten Sie, dass Basic-Objekte niemals gleich sind.
Wenn A und B Matrizen sind, wird True zurückgegeben, wenn:
Beide Matrizen die gleiche Anzahl an Dimensionen (bis zu 2 Dimensionen) haben und ihre unteren und oberen Grenzen für alle Dimensionen identisch sind.
Alle Elemente in beiden Matrizen jeweils gleich sind.
Zwei leere Matrizen werden als gleich angesehen.
Gibt True zurück, wenn der Typ von A Boolean und sein Wert False ist.
svc.AssertFalse(a: any, message: str = ""): bool
Gibt True zurück, wenn A größer als B ist.
svc.AssertGreater(a: any, b: any, message: str = ""): bool
Der Vergleich zwischen A und B setzt Folgendes voraus:
Zulässige Datentypen sind String, Date oder numerisch.
Beide Ausdrücke müssen denselben VarType haben oder beide müssen numerisch sein.
Bei Zeichenfolgenvergleichen wird zwischen Groß- und Kleinschreibung unterschieden.
Gibt True zurück, wenn A größer oder gleich B ist.
svc.AssertGreaterEqual(a: any, b: any, message: str = ""): bool
Der Vergleich zwischen A und B setzt Folgendes voraus:
Zulässige Datentypen sind String, Date oder numerisch.
Beide Ausdrücke müssen denselben VarType haben oder beide müssen numerisch sein.
Bei Zeichenfolgenvergleichen wird zwischen Groß- und Kleinschreibung unterschieden.
Gibt True zurück, wenn A in B gefunden wird.
svc.AssertIn(a: any, b: any, message: str = ""): bool
Diese Aussage setzt Folgendes voraus:
Ausdruck B kann eine 1D-Matrix, ein Objekt Dictionary aus ScriptForge oder eine Zeichenfolge sein.
Wenn Ausdruck B eine 1D-Matrix ist, kann Ausdruck A ein Datum oder ein numerischer Wert sein.
Wenn Ausdruck B ein Objekt Dictionary aus ScriptForge ist, wird die Zeichenfolge A unter den Schlüsseln in B gesucht.
Bei Zeichenfolgenvergleichen wird zwischen Groß- und Kleinschreibung unterschieden.
Gibt True zurück, wenn A eine Instanz eines angegebenen Objekttyps ist, der als Zeichenfolge angegeben ist, die den Typnamen enthält.
svc.AssertIsInstance(a: any, objecttype: str, message: str = ""): bool
Ausdruck A kann einer der folgenden sein:
Ein Objekt "ScriptForge". In diesem Fall ist das Argument objecttype eine Zeichenfolge wie "DICTIONARY", "calc", "Dialog" und so weiter.
Ein UNO-Objekt. In diesem Fall muss das Argument objecttype eine Zeichenfolge sein, die mit dem Wert identisch ist, der von der Methode SF_Session.UnoObjectType() zurückgegeben wird.
Eine Matrix. In diesem Fall wird erwartet, dass das Argument objecttype "array" ist.
Jede andere Variable (weder ein Object noch eine Matrix). In diesem Fall ist objecttype eine Zeichenfolge, die mit dem Wert übereinstimmt, der von der eingebauten Funktion TypeName zurückgegeben wird.
Gibt True zurück, wenn A ein Objekt ist, das den Wert Nothing hat.
svc.AssertIsNothing(a: any, message: str = ""): bool
Gibt True zurück, wenn A den Wert Null hat.
svc.AssertIsNull(a: any, message: str = ""): bool
Gibt True zurück, wenn A kleiner als B ist.
svc.AssertLess(a: any, b: any, message: str = ""): bool
Der Vergleich zwischen A und B setzt Folgendes voraus:
Zulässige Datentypen sind String, Date oder numerisch.
Beide Ausdrücke müssen denselben VarType haben oder beide müssen numerisch sein.
Bei Zeichenfolgenvergleichen wird zwischen Groß- und Kleinschreibung unterschieden.
Gibt True zurück, wenn A kleiner oder gleich B ist.
svc.AssertLessEqual(a: any, b: any, message: str = ""): bool
Der Vergleich zwischen A und B setzt Folgendes voraus:
Zulässige Datentypen sind String, Date oder numerisch.
Beide Ausdrücke müssen denselben VarType haben oder beide müssen numerisch sein.
Bei Zeichenfolgenvergleichen wird zwischen Groß- und Kleinschreibung unterschieden.
Gibt True zurück, wenn Zeichenfolge A mit einem gegebenen Muster übereinstimmt, das Platzhalter enthält.
svc.AssertLike(a: any, pattern: str = "", message: str = ""): bool
Folgende Platzhalter werden akzeptiert:
? – Steht für ein beliebiges einzelnes Zeichen.
* – Steht für kein, ein oder mehrere Zeichen.
Gibt True zurück, wenn A und B numerische Werte sind und nicht als nahe beieinander liegend betrachtet werden, bei einer gegebenen relative Toleranz.
svc.AssertNotAlmostEqual(a: any, b: any, tolerance: double = 1E-09, message: str = ""): bool
Diese Aussage gibt True zurück, wenn die beiden folgenden Bedingungen erfüllt sind:
A und B können in den Typ Double konvertiert werden.
Die absolute Differenz zwischen A und B geteilt durch den größten absoluten Wert von A oder B ist größer als der in tolerance angegebene Wert.
Gibt True zurück, wenn A und B nicht als gleich betrachtet werden.
svc.AssertNotEqual(a: any, b: any, message: str = ""): bool
Diese Methode funktioniert sowohl für Skalare als auch für Matrizen. Lesen Sie die Anweisungen in AssertEqual für weitere Informationen darüber, was Gleichheit in diesem Zusammenhang bedeutet Behauptung.
Gibt True zurück, wenn A (eine Matrix) nicht in B gefunden wird.
svc.AssertNotIn(a: any, b: any, message: str = ""): bool
Lesen Sie die Anweisungen in AssertIn, um weitere Informationen zu den Annahmen dieser Methode zu erhalten.
Gibt True zurück, wenn A keine Instanz eines angegebenen Objekttyps ist.
svc.AssertNotInstance(a: any, objecttype: str, message: str = ""): bool
Lesen Sie die Anweisungen in AssertIsInstance, um weitere Informationen zu den Annahmen dieser Methode zu erhalten.
Gibt True zurück, wenn Zeichenfolge A nicht mit einem gegebenen Muster übereinstimmt, das Platzhalter enthält.
svc.AssertNotLike(a: any, pattern: str = "", message: str = ""): bool
Lesen Sie die Anweisungen in AssertLike, um weitere Informationen zu den Annahmen dieser Methode zu erhalten.
Gibt True zurück, außer wenn A ein Objekt ist, das den Wert Nothing hat.
svc.AssertNotNothing(a: any, message: str = ""): bool
Gibt True zurück, außer wenn A den Wert Null hat.
svc.AssertNotNull(a: any, message: str = ""): bool
Gibt True zurück, wenn A keine Zeichenfolge ist oder nicht mit dem gegebenen regulären Ausdruck übereinstimmt.
svc.AssertNotRegex(a: any, regex: str = "", message: str = ""): bool
Beim Vergleich wird zwischen Groß- und Kleinschreibung unterschieden.
Gibt True zurück, wenn Zeichenfolge A mit dem gegebenen regulären Ausdruck übereinstimmt.
svc.AssertRegex(a: any, regex: str = "", message: str = ""): bool
Beim Vergleich wird zwischen Groß- und Kleinschreibung unterschieden.
Gibt True zurück, wenn Ausdruck A Boolean und sein Wert True ist.
svc.AssertTrue(a: any, message: str = ""): bool
Erzwingt das Fehlschlagen eines Testfalls.
svc.Fail(message: str = "")
Eine Nachricht kann bereitgestellt werden, um in der Konsole gemeldet zu werden.
Schreibt die angegebene Nachricht in die Konsole.
svc.Log(message: str = "")
Eine Nachricht kann bereitgestellt werden, um in der Konsole gemeldet zu werden.
Zeigt ein Meldungsfeld mit einer Meldung und den aktuellen Eigenschaftswerten des Dienstes Exception an.
Diese Methode wird häufig im Ausnahmebehandlungsabschnitt von Sub verwendet, der den Testfall enthält, der erreicht wird, wenn eine Aussage fehlschlägt oder wenn die Methode Fail aufgerufen wird.
svc.ReportError(message: str = "")
Abhängig vom Wert der Eigenschaft WhenAssertionFails kann die Testausführung fortgesetzt oder unterbrochen werden.
Beim Schreiben von Testfällen wird empfohlen, einen Aufruf der Methode ReportError in den Ausnahmebehandlungsabschnitt von Sub aufzunehmen.
Wenn die Eigenschaft LongMessage gleich True ist, folgt der Angabe von message die Beschreibung der Standardfehlermeldung. Ansonsten wird nur message angezeigt.
Führt die vollständige Testsuite aus, die im angegebenen Modul implementiert ist. Jeder Testfall wird unabhängig voneinander ausgeführt.
Das Ausführen einer Testsuite besteht aus:
Ausführen der optionalen Methode Setup, die im Modul vorhanden ist.
Einmaliges Ausführen jedes Testfalls, in keiner bestimmten Reihenfolge.
Ausführen der optionalen Methode TearDown, die im Modul vorhanden ist.
svc.RunTest(testsuite: str, testcasepattern: str = "", message: str = ""): int
Das Argument testcasepattern legt ein Muster fest, zusammengesetzt aus den Platzhaltern "?" und "*", um auszuwählen, welche Testfälle ausgeführt werden. Beim Vergleich wird die Groß-/Kleinschreibung nicht beachtet.
Wenn eine message bereitgestellt wird, wird sie beim Start des Tests in die Konsole geschrieben.
Unterbricht die laufende Testsuite, ohne die Methode TearDown aufzurufen.
Das Überspringen eines Tests ist normalerweise während der Methode Setup sinnvoll, wenn nicht alle Bedingungen zum Ausführen des Tests erfüllt sind.
Es liegt an der Methode Setup, das Sub kurz nach dem Aufruf von SkipTest zu verlassen.
Wenn SkipTest innerhalb eines Testfalls aufgerufen wird, wird die Ausführung der Testsuite unterbrochen und die verbleibenden Testfälle werden nicht ausgeführt. Beachten Sie, dass die Reihenfolge, in der Testfälle ausgeführt werden, innerhalb einer Testsuite beliebig ist.
svc.SkipTest(message: str = "")
Wenn eine message bereitgestellt wird, wird sie in die Konsole geschrieben.