LibreOffice 25.2 Help
De service UnitTest biedt een raamwerk voor het automatiseren van unit-tests met behulp van de Basic-taal, inclusief de mogelijkheid om:
Testgevallen in testsuites en unittests samenvoegen.
Setup- en afsluitcode delen tussen testcases.
Testresultaten rapporteren met behulp van de Console.
Zowel de unit tests als de te testen code moeten in Basic zijn geschreven. De code die wordt getest, kan functies aanroepen die in andere talen zijn geschreven.
De service UnitTest is niet beschikbaar voor Python-scripts.
Een testgeval is de individuele testeenheid. Het controleert op een specifiek antwoord op een bepaalde set invoer.
In de service UnitTest wordt een testgeval vertegenwoordigd door een enkele Basic Sub waarvan de naam begint met een algemeen voorvoegsel (de standaardinstelling is "Test_").
Het testgeval mislukt als een van de AssertX-methodes False retourneert.
Een testpakket is een verzameling testgevallen die samen moeten worden uitgevoerd.
Alle testgevallen van een testpakket worden opgeslagen in één Basic-module.
Een testpakket kan de methodes SetUp en TearDown implementeren om zich voor te bereiden op testgevallen in zijn module.
Een volledige eenheidstest bestaat uit een set testpakketten in dezelfde Basic-bibliotheek.
Voordat u de service UnitTest gebruikt, moet de ScriptForge-bibliotheek worden geladen of geïmporteerd:
Roep de service aan in de eenvoudige modus om AssertX-functies aan te roepen zonder de volledige hiërarchie van testpakketten en testgevallen te hoeven bouwen.
In de eenvoudige modus wordt de service aangeroepen in de testgeval, zoals weergegeven in het onderstaande voorbeeld:
    Sub SimpleTest
        On Local Error GoTo CatchError
        Dim myTest As Variant
        myTest = CreateScriptService("UnitTest")
        ' Een paar dummy-tests
        myTest.AssertEqual(1 + 1, 2)
        myTest.AssertEqual(1 - 1, 0)
        MsgBox("Alle testen geslaagd")
        Exit Sub
    CatchError:
        myTest.ReportError("Een test is mislukt")
    End Sub
  Als in dit voorbeeld een van de AssertEqual-aanroepen mislukt, gaat de interpreter naar het label CatchError en rapporteert de fout door de methode ReportError aan te roepen .
Wanneer aangeroepen in volledige modus, is het maken van de service buiten de testcode en worden alle tests georganiseerd in testgevallen en testpakketten in een enkele bibliotheek.
In het volgende voorbeeld wordt een UnitTest-instantie gemaakt waarvan de tests zich in het huidige document (ThisComponent) in de bibliotheek "Tests" bevinden.
    GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
    Dim myUnitTest As Variant
    myUnitTest = CreateScriptService("UnitTest", ThisComponent, "Tests")
  Bedenk dat een ODS-bestand een module heeft met de naam "MathUtils" in zijn "Standard"-bibliotheek met de volgende code:
    ' Code in module Standard.MathUtils
    Function Sum(a, b) As Double
        Sum = a + b
    End Function
    
    Function Multiply(a, b) As Double
        Multiply = a * b
    End Function
  Om een volledig testpakket te maken, moet u er rekening mee houden dat er een nieuwe bibliotheek met de naam "Tests" in het bestand wordt gemaakt met een enkele module "AllTests" die de onderstaande code bevat:
    ' Code in module 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)
        ' Voorbereidingscode liep voorafgaand aan de eerste testcase
        Dim exc As Variant
        exc = CreateScriptService("Exception")
        exc.Console(Modal := False)
    End Sub
    
    Sub TearDown(test)
        ' Optionele opschooncode aangeroepen na de laatste testcase
    End Sub
    
    Sub Test_Sum(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Sum(1, 1), 2, "Tel twee positieve gehele getallen op")
        test.AssertEqual(Sum(-10, 20), 10, "Som van negatieve en positieve gehele getallen")
        test.AssertEqual(Sum(1.5, 1), 2.5, "Som van zwevende waarden en gehele getallen")
        Exit Sub
    CatchError:
        test.ReportError("Sommethode is mislukt")
    End Sub
    
    Sub Test_Multiply(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Multiply(2, 2), 4, "Vermenigvuldig twee positieve gehele getallen")
        test.AssertEqual(Multiply(-4, 2), -8, "Vermenigvuldig negatieve en positieve gehele getallen")
        test.AssertEqual(Multiply(1.5, 3), 4.5, "Vermenigvuldigen van zwevende waarden en gehele getallen")
        Exit Sub
    CatchError:
        test.ReportError("Vermenigvuldigingsmethode is mislukt")
    End Sub
  Bovenstaand testpakket bestaat uit twee testgevallen Test_Sum en Test_Multiply. Om alle tests uit te voeren, voert u gewoon de methode Main uit vanuit de module "AllTests".
De Console van de service Exception is gebruikt als de standaarduitvoer om testresultaten af te drukken. Na het uitvoeren van het bovenstaande voorbeeld, wordt de volgende uitvoer weergegeven in de console:
    ' 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)
  Als een van de AssertEqual-methodes faalt tijdens deze tests, wordt een foutbericht toegevoegd aan de console.
| Naam | Alleen lezen | Type | Beschrijving | 
|---|---|---|---|
| LongMessage | Nee | Boolean | Indien ingesteld op True (standaard) toont de console het standaardbericht dat is toegevoegd aan het bericht dat door de tester is verstrekt. Indien False, wordt alleen het bericht gebruikt dat door de tester is gedefinieerd. | 
| ReturnCode | Ja | Integer | Waarde die wordt geretourneerd door RunTest nadat de eenheidstest is voltooid. Hierna volgt een lijst met mogelijke waarden: 0 - Test voltooid zonder fouten of test niet gestart | 
| Verbose | Nee | Boolean | Indien ingesteld op True, worden alle beweringen gerapporteerd in de console (al dan niet mislukt). Indien False (standaard), worden alleen falende beweringen gerapporteerd. | 
| WhenAssertionFails | Nee | Integer | Definieert wat er wordt gedaan als een bewering mislukt. Hierna volgt een lijst met mogelijke waarden: 0 - Negeer de fout en ga door met het uitvoeren van de test | 
Alle beweringen testen een of twee uitdrukkingen, waarnaar in de rest van deze helppagina wordt verwezen als A en B. Het zijn altijd de eerste een of twee argumenten in de AssertX-methode.
Alle AssertX-methodes accepteren een message-argument dat een aangepast bericht specificeert dat in de console moet worden gerapporteerd met betrekking tot de bewering. Standaard wordt een lege tekenreeks gebruikt. Dit argument bevindt zich altijd in de laatste positie van de bewering.
Sommige AssertX-methodes accepteren ook aanvullende argumenten, zoals hieronder beschreven door hun syntaxis.
Retourneert True indien A en B numerieke waarden zijn en worden geacht dicht bij elkaar te liggen, gegeven een relatieve tolerantie.
svc.AssertAlmostEqual(a: any, b: any, tolerance: double = 1E-09, message: str = ""): bool
Deze bewering retourneert True als aan de twee onderstaande voorwaarden is voldaan:
A en B kunnen worden geconverteerd naar het type Double.
Het absolute verschil tussen A en B gedeeld door de grootste absolute waarde van A of B is lager dan de waarde gespecificeerd in tolerance.
Retourneert True indien A en B als gelijk worden beschouwd.
svc.AssertEqual(a: any, b: any, message: str = ""): bool
Als A en B scalaire waarden zijn, wordt True geretourneerd als:
Beide uitdrukkingen hebben hetzelfde VarType of zijn beide numeriek.
Booleaanse en numerieke waarden worden vergeleken met de = operator.
Tekenreeksen worden vergeleken met de ingebouwde functie StrComp. De vergelijking is hoofdlettergevoelig.
Datums en tijden worden tot op de seconde vergeleken.
Null, Empty en Nothing zijn niet gelijk, maar AssertEqual(Nothing, Nothing) retourneert True.
UNO-objecten worden vergeleken met de ingebouwde EqualUnoObjects-methode.
Merk op dat basisobjecten nooit gelijk zijn.
Als A en B matrixen zijn, wordt True geretourneerd als:
Beide matrixen hebben hetzelfde aantal dimensies (maximaal 2 dimensies) en hun onder- en bovengrenzen zijn identiek voor alle dimensies.
Alle items in beide matrixen zijn één voor één gelijk.
Twee lege matrixen worden als gelijk beschouwd.
Retourneert True wanneer het type A Boolean is en de waarde False is.
svc.AssertFalse(a: any, message: str = ""): bool
Retourneert True indien A groter is dan B.
svc.AssertGreater(a: any, b: any, message: str = ""): bool
De vergelijking tussen A en B gaat uit van het volgende:
Geschikte gegevenstypes zijn Tekenreeks, Datum of numeriek.
Beide expressies moeten hetzelfde VarType hebben of beide moeten numeriek zijn.
Tekenreeksvergelijkingen zijn hoofdlettergevoelig.
Retourneert True indien A groter is dan of gelijk is aan B.
svc.AssertGreaterEqual(a: any, b: any, message: str = ""): bool
De vergelijking tussen A en B gaat uit van het volgende:
Geschikte gegevenstypes zijn Tekenreeks, Datum of numeriek.
Beide expressies moeten hetzelfde VarType hebben of beide moeten numeriek zijn.
Tekenreeksvergelijkingen zijn hoofdlettergevoelig.
Retourneert True indien A wordt gevonden in B.
svc.AssertIn(a: any, b: any, message: str = ""): bool
Deze bewering gaat uit van het volgende:
Expressie B kan een 1D-matirix, een ScriptForge Dictionary-object of een tekenreeks zijn.
Als uitdrukking B een 1D-matrix is, kan uitdrukking A een datum of een numerieke waarde zijn.
Als uitdrukking B een ScriptForge Dictionary-object is, wordt er gezocht naar tekenreeks A tussen de sleutels in B.
Tekenreeksvergelijkingen zijn hoofdlettergevoelig.
Retourneert True indien A een instantie is van een opgegeven objecttype, opgegeven als een tekenreeks die de typenaam bevat.
svc.AssertIsInstance(a: any, objecttype: str, message: str = ""): bool
Expressie A kan een van de volgende zijn:
Een ScriptForge-object. In dit geval is het argument objecttype een tekenreeks zoals "DICTIONARY", "calc", "Dialog", enz.
Een UNO-object. In dit geval moet het argument objecttype een tekenreeks zijn die identiek is aan de waarde die wordt geretourneerd door de methode SF_Session.UnoObjectType().
Een matrix. In dit geval wordt verwacht dat het argument objecttype "matrix" is.
Elke andere variabele (noch een Object noch een Matrix). In dit geval is objecttype een tekenreeks die overeenkomt met de waarde die wordt geretourneerd door de ingebouwde functie TypeName.
Retourneert True indien A een object is met de waarde Nothing.
svc.AssertIsNothing(a: any, message: str = ""): bool
Retourneert True indien A de waarde Null heeft.
svc.AssertIsNull(a: any, message: str = ""): bool
Retourneert True indien A kleiner is dan B.
svc.AssertLess(a: any, b: any, message: str = ""): bool
De vergelijking tussen A en B gaat uit van het volgende:
Geschikte gegevenstypes zijn Tekenreeks, Datum of numeriek.
Beide expressies moeten hetzelfde VarType hebben of beide moeten numeriek zijn.
Tekenreeksvergelijkingen zijn hoofdlettergevoelig.
Retourneert True indien A kleiner is dan of gelijk is aan B.
svc.AssertLessEqual(a: any, b: any, message: str = ""): bool
De vergelijking tussen A en B gaat uit van het volgende:
Geschikte gegevenstypes zijn Tekenreeks, Datum of numeriek.
Beide expressies moeten hetzelfde VarType hebben of beide moeten numeriek zijn.
Tekenreeksvergelijkingen zijn hoofdlettergevoelig.
Retourneert True als tekenreeks A overeenkomt met een bepaald patroon dat jokertekens bevat.
svc.AssertLike(a: any, pattern: str = "", message: str = ""): bool
De volgende jokertekens worden geaccepteerd:
? - Vertegenwoordigt een enkel teken.
* - Staat voor nul, één of meerdere tekens.
Retourneert True indien A en B numerieke waarden zijn en niet als dicht bij elkaar worden beschouwd, gegeven een relatieve tolerantie.
svc.AssertNotAlmostEqual(a: any, b: any, tolerance: double = 1E-09, message: str = ""): bool
Deze bewering retourneert True als aan de twee onderstaande voorwaarden is voldaan:
A en B kunnen worden geconverteerd naar het type Double.
Het absolute verschil tussen A en B gedeeld door de grootste absolute waarde van A of B is groter dan de waarde gespecificeerd in tolerance.
Retourneert True indien A en B niet als gelijk worden beschouwd.
svc.AssertNotEqual(a: any, b: any, message: str = ""): bool
Deze methode werkt zowel voor scalairen als voor matrixen. Lees de instructies in AssertEqual voor meer informatie over wat gelijkheid in deze bewering betekent.
Retourneert True indien A (een tekenreeks) niet wordt gevonden in B.
svc.AssertNotIn(a: any, b: any, message: str = ""): bool
Lees de instructies in AssertIn voor meer informatie over de aannames van deze methode .
Retourneert True indien A geen instantie is van een opgegeven objecttype.
svc.AssertNotInstance(a: any, objecttype: str, message: str = ""): bool
Lees de instructies in AssertIsInstance voor meer informatie over de aannames van deze methode .
Retourneert True als tekenreeks A niet overeenkomt met een bepaald patroon dat jokertekens bevat.
svc.AssertNotLike(a: any, pattern: str = "", message: str = ""): bool
Lees de instructies in AssertLike voor meer informatie over de aannames van deze methode .
Retourneert True behalve indien A een object is met de waarde Nothing.
svc.AssertNotNothing(a: any, message: str = ""): bool
Retourneert True behalve wanneer A de waarde Null heeft.
svc.AssertNotNull(a: any, message: str = ""): bool
Retourneert True indien A geen tekenreeks is of niet overeenkomt met de opgegeven reguliere expressie.
svc.AssertNotRegex(a: any, regex: str = "", message: str = ""): bool
De vergelijking is hoofdlettergevoelig.
Retourneert True indien tekenreeks A overeenkomt met de opgegeven reguliere expressie.
svc.AssertRegex(a: any, regex: str = "", message: str = ""): bool
De vergelijking is hoofdlettergevoelig.
Retourneert True indien uitdrukking A een Boolean is en de waarde True is.
svc.AssertTrue(a: any, message: str = ""): bool
Dwingt een testgeval te mislukken.
svc.Fail(message: str = "")
Er kan een bericht worden opgegeven om in de console te worden gerapporteerd.
Schrijft het opgegeven bericht in de console.
svc.Log(message: str = "")
Er kan een bericht worden opgegeven om in de console te worden gerapporteerd.
Geeft een berichtvenster weer met een bericht en de huidige eigenschapswaarden van de service Exception.
Deze methode wordt vaak gebruikt in de sectie voor het afhandelen van uitzonderingen van de Sub die dit testgeval bevat, die wordt bereikt wanneer een bewering mislukt of wanneer de methode Fail wordt aangeroepen.
svc.ReportError(message: str = "")
Afhankelijk van de waarde van de eigenschap WhenAssertionFails, kan de testuitvoering doorgaan of worden onderbroken.
Bij het schrijven van testgevallen wordt aanbevolen om een aanroep van de methode ReportError op te nemen in de sectie voor het afhandelen van uitzonderingen van de Sub.
Als de eigenschap LongMessage gelijk is aan True, wordt het opgegeven bericht gevolgd door de standaardbeschrijving van het foutbericht. Anders wordt alleen het bericht weergegeven.
Voert het volledige testpakket uit die in de opgegeven module is geïmplementeerd. Elk testgeval wordt onafhankelijk van elkaar uitgevoerd.
Het runnen van een testpakket bestaat uit:
De optionele Setup-methode uitvoeren die aanwezig is in de module.
Elk testgeval één keer uitvoeren, in willekeurige volgorde.
De optionele TearDown-methode uitvoeren die aanwezig is in de module.
svc.RunTest(testsuite: str, testcasepattern: str = "", message: str = ""): int
Het argument testcasepattern specificeert een patroon dat bestaat uit "?" en "*" jokertekens om te selecteren welke testgevallen worden uitgevoerd. De vergelijking is niet hoofdlettergevoelig.
Als er een bericht wordt gegeven, wordt dit naar de console geschreven wanneer de test start.
Onderbreekt het lopende testpakket zonder de methode TearDown aan te roepen.
Het overslaan van een test is meestal zinvol tijdens de Setup-methode wanneer niet aan alle voorwaarden voor het uitvoeren van de test wordt voldaan.
Het is aan de Setup-methode om de Sub kort na de SkipTest-aanroep af te sluiten.
Als SkipTest wordt aangeroepen vanuit een testgeval, wordt de uitvoering van het testpakket onderbroken en worden de overige testgevallen niet uitgevoerd. Houd er rekening mee dat de volgorde waarin testgevallen worden uitgevoerd willekeurig is binnen een testpakket.
svc.SkipTest(message: str = "")
Als er een bericht wordt gegeven, wordt dit naar de console geschreven.