LibreOffice 25.2 Hjælp
Tjenesten UnitTest giver en struktur til at automatisere enhedstests i Basic-sproget, inklusive muligheden for at:
Samle testcases i testsamlinger og enhedstests.
Dele opsætning- og nedluknings-kode mellem testcases.
Rapportere testresultater ved hjælp af Console (konsol).
Både enhedstests og koden, der skal testes, skal være skrevet i Basic. Koden, som testes, kan kalde funktioner skrevet i andre sprog.
UnitTest-tjenesten er ikke tilgængelig for Python-scripts.
En testcase er den individuelle testenhed. Den afprøver et specifikt respons til et bestemt set af input.
I UnitTest-tjenesten bliver en testcase repræsenteret med en enkelt Basic-Sub, hvis navn begynder med et fælles præfiks (standardpræfikset er "Test_").
Testcasen fejler hvis en af AssertX-metoderne returnerer False.
En testsamling er en samling af testcases, som er beregnet på at udføres sammen.
Alle testcases i en testsamling er gemt i et enkelt Basic-modul.
En testsamling kan implementere metoderne SetUp (opsæt) og TearDown (nedriv) til at forberede testcasene i dens modul.
En fuld enhedstest består af et sæt af testcases i det samme Basic-bibliotek
Før du bruger tjenesten UnitTest skal ScriptForge-biblioteket være indlæst eller importeret:
Kald tjenesten i simpel tilstand for at kalde AssertX-funktioner, uden at du behøver at bygge hele hierarkiet af testsamlinger og testcases.
I simpel tilstand kaldes tjenesten inde fra testcasen, som vist i eksemplet herunder:
    Sub SimpleTest
        On Local Error GoTo CatchError
        Dim myTest As Variant
        myTest = CreateScriptService("UnitTest")
        ' Nogle få dummy-tests
        myTest.AssertEqual(1 + 1, 2)
        myTest.AssertEqual(1 - 1, 0)
        MsgBox("Alle tests bestået")
        Exit Sub
    CatchError:
        myTest.ReportError("An test fejlede")
    End Sub
  I dette eksempel sker det, at hvis nogen af AssertEqual-kaldende fejler, vil fortolkeren gå til CatchError-etiketten og rapportere fejlen ved at kalde metoden ReportError.
Når tjenesten kaldes i fuld tilstand, er oprettelsen af tjenesten ekstern i forhold til testkoden, og alle tests er organiserede i testcases og testsamlinger i et samlet bibliotek.
Det følgende eksempel opretter en UnitTest-instans, hvis tests er placeret i det aktuelle dokument (ThisComponent) i biblioteket "Tests".
    GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
    Dim myUnitTest As Variant
    myUnitTest = CreateScriptService("UnitTest", ThisComponent, "Tests")
  Antag, at en ODS-fil har et modul kaldet "MathUtils" i dets "Standard"-bibliotek, med den følgende kode:
    ' Kode i modulet Standard.MathUtils
    Function Sum(a, b) As Double
        Sum = a + b
    End Function
    
    Function Multiply(a, b) As Double
        Multiply = a * b
    End Function
  For at oprette en fuld testsamling, tænk på et nyt bibliotek med navnet "Test" oprettet i filen med et enkelt modul "AllTests", som indeholder koden herunder:
    ' Kode i modulet 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)
        ' Forberedelseskode, som blev udfør forud for den første testcase
        Dim exc As Variant
        exc = CreateScriptService("Exception")
        exc.Console(Modal := False)
    End Sub
    
    Sub TearDown(test)
        ' Valgfri oprydningskode, som kaldes efter den sidste testcase
    End Sub
    
    Sub Test_Sum(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Sum(1, 1), 2, "Sum af to positive heltal")
        test.AssertEqual(Sum(-10, 20), 10, "Sum af negative og positive heltal")
        test.AssertEqual(Sum(1.5, 1), 2.5, "Sum af decimaltal og heltal")
        Exit Sub
    CatchError:
        test.ReportError("Metoden Sum virker ikke")
    End Sub
    
    Sub Test_Multiply(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Multiply(2, 2), 4, "Multiplikation af to positive heltal")
        test.AssertEqual(Multiply(-4, 2), -8, "Multiplikation af negative og positive heltal")
        test.AssertEqual(Multiply(1.5, 3), 4.5, "Multiplikation af decimaltal og heltal")
        Exit Sub
    CatchError:
        test.ReportError("Metoden Multiply virker ikke")
    End Sub
  Testsamlingen ovenfor består af to testcases Test_Sum og Test_Multiply. For at udføre alle tests, udfør Main-metoden fra "AllTests"-modulet.
Metoden Console fra Exception-tjenesten bliver brugt som standardoutput til at udskrive testresultater. Efter afvikling af eksemplet ovenfor vil følgende output blive vist i konsollen:
    ' 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)
  Hvis nogen af AssertEqual-metoderne fejler under disse tests, bliver en fejlmeddelelse tilføjet til konsollen.
| Navn | Skrivebeskyttet | Type | Beskrivelse | 
|---|---|---|---|
| LongMessage | Nej | Boolean | Når sat til True (standard), viser konsollen standardbeskeden i forlængelse af beskeden fra testeren. Når False, bruges kun beskeden fra testeren. | 
| ReturnCode | Ja | Integer | Værdi returneret af RunTest efter at enhedstesten er afsluttet. Her følger en liste over mulige værdier: 0 – Test afsluttet uden fejl, eller test ikke startet | 
| Verbose | Nej | Boolean | Når sat til True, bliver alle påstande (assertions) rapporteret i konsollen (med eller uden fejl). Når False (standard), bliver kun påstande som fejler rapporterede. | 
| WhenAssertionFails | Nej | Integer | Definerer, hvad der gøres, når en påstand mislykkes. Dernæst er en liste over mulige værdier: 0 – Ignorér fejlen og fortsæt afviklingen af testen | 
Alle påstande (assertions) tester et eller to udtryk, som i resten af denne hjælpeside kaldes A og B. De er altid det første eller de to første argumenter i AssertX-metoden.
Alle AssertX-metoder accepterer et message-argument (besked), som angiver en selvvalgt besked om påstanden, der skal rapporteres i konsollen. Som standard bruges en tom streng. Beskeden er altid argumentet i sidste position af AssertX-metoden.
Nogle AssertX-metoder accepterer også yderligere argumenter, som beskrevet af deres syntakser herunder.
Returnerer True når A og B er numeriske værdier og betragtes som tæt på hinanden, ud fra en given relativ tolerance.
svc.AssertAlmostEqual(a: any, b: any, tolerance: double = 1E-09, message: str = ""): bool
Denne påstand returner True, hvis to betingelser er opfyldt:
A og B kan konverteres til typen Double.
Den absolutte difference mellem A og B divideret med den største absolutte værdi af A eller B er mindre end værdien angivet i tolerance. Dvs. |A-B| / max(|A|,|B|) er indenfor tolerancen.
Returnerer True når A og B betragtes som lig med hinanden.
svc.AssertEqual(a: any, b: any, message: str = ""): bool
Når A og B er enkeltværdier (skalarer), bliver True returneret hvis:
Begge udtryk var samme VarType eller begge er numeriske.
Boolske og numeriske værdier sammenlignes med = operatoren.
Strenge sammenlignes med den indbyggede StrComp-funktion. Sammenlingen skelner mellem store og små bogstaver.
Datoer og tidspunkter sammenlignes op til sekundet.
Null, Empty og Nothing er ikke lig med hinanden, men AssertEqual(Nothing, Nothing) returnerer True.
UNO-objekter bliver sammenlignet med den indbyggede EqualUnoObjects-metode.
Bemærk, at Basic-objekter aldrig er ens.
Når A og B er arrays, returneres True hvis:
Begge arrays har det samme antal dimensioner (op til 2 dimensioner), og deres nedre og øvre grænser er identiske for alle dimensioner.
Alle elementer i begge arrays er parvis lig med hinanden.
To tomme arrays betragtes som lig med hinanden.
Returnerer True når typen af A er Boolean og værdien er False.
svc.AssertFalse(a: any, message: str = ""): bool
Returnerer True når A er større end B.
svc.AssertGreater(a: any, b: any, message: str = ""): bool
Sammenligningen mellem A og B forudsætter følgende:
De tilladte datatyper er String, Date eller numeriske.
Begge udtryk skal have samme VarType, eller begge skal være numeriske.
Streng-sammenligninger skelner mellem store og små bogstaver.
Returnerer True når A er større end eller lig med B.
svc.AssertGreaterEqual(a: any, b: any, message: str = ""): bool
Sammenligningen mellem A og B forudsætter følgende:
De tilladte datatyper er String, Date eller numeriske.
Begge udtryk skal have samme VarType, eller begge skal være numeriske.
Streng-sammenligninger skelner mellem store og små bogstaver.
Returnerer True når A kan findes i B.
svc.AssertIn(a: any, b: any, message: str = ""): bool
Denne påstand forudsætter følgende:
Udtryk B kan være et 1D-array, et ScriptForge Dictionary-objekt eller en streng.
Når udtryk B er et 1D-array, kan udtryk B være en dato eller en numerisk værdi.
Når udtryk B er et ScriptForge Dictionary-objekt, så søges der efter strenge A blandt nøglerne i B.
Streng-sammenligninger skelner mellem store og små bogstaver.
Returnerer True når A er en instans af en angivet objekttype, specificeret som en streng med typenavnet.
svc.AssertIsInstance(a: any, objecttype: str, message: str = ""): bool
Udtryk A kan være et af følgende:
Et ScriptForge-objekt. I dette tilfælde er argumentet objecttype en streng såsom "DICTIONARY", "calc", "Dialog", osv.
Et UNO-objekt. I dette tilfælde skal argumentet objecttype være en streng, som er identisk med værdien returneret af SF_Session.UnoObjectType()-metoden.
Et Array. I dette tilfælde forventes argumentet objecttype at være "array".
En anden type variabel (hver Object eller Array). I dette tilfælde skal argumentet objecttype matche den streng, som returneres af den indbyggede TypeName-funktion.
Returnerer True, når A er et objekt, som har værdien Nothing.
svc.AssertIsNothing(a: any, message: str = ""): bool
Returnerer True når A har værdien Null.
svc.AssertIsNull(a: any, message: str = ""): bool
Returnerer True når A er mindre end B.
svc.AssertLess(a: any, b: any, message: str = ""): bool
Sammenligningen mellem A og B forudsætter følgende:
De tilladte datatyper er String, Date eller numeriske.
Begge udtryk skal have samme VarType, eller begge skal være numeriske.
Streng-sammenligninger skelner mellem store og små bogstaver.
Returnerer True når A er mindre end eller lig med B.
svc.AssertLessEqual(a: any, b: any, message: str = ""): bool
Sammenligningen mellem A og B forudsætter følgende:
De tilladte datatyper er String, Date eller numeriske.
Begge udtryk skal have samme VarType, eller begge skal være numeriske.
Streng-sammenligninger skelner mellem store og små bogstaver.
Returnerer True hvis strengen A matcher et givet mønster med jokertegn.
svc.AssertLike(a: any, pattern: str = "", message: str = ""): bool
Følgende jokertegn accepteres:
? – står for et enkelt tegn.
* – står for nul, et eller flere tegn.
Returnerer True, når A og B er numeriske værdier og ikke betragtes som tæt på hinanden, givet en relativ tolerance.
svc.AssertNotAlmostEqual(a: any, b: any, tolerance: double = 1E-09, message: str = ""): bool
Denne påstand returnerer True, hvis nedenstående to betingelser er opfyldt:
A og B kan konverteres til typen Double.
Den absolutte difference mellem A og B divideret med den største absolutte værdi af A eller B er større end værdien angivet i tolerance. Dvs. |A-B| / max(|A|,|B|) er ikke indenfor tolerancen.
Returnerer True når A og B ikke betragtes som lig med hinanden.
svc.AssertNotEqual(a: any, b: any, message: str = ""): bool
Denne metode kan bruges på både enkeltværdier (skalarer) og arrays. Læs instruktionen til AssertEqual for mere information om, hvad "lig med" betyder i denne påstand.
Returnerer True, når A (en streng) ikke findes i B.
svc.AssertNotIn(a: any, b: any, message: str = ""): bool
Læs instruktionen til AssertIn for mere information om antagelserne for denne metode.
Returnerer True, når A ikke er en instans af en angivet objekttype.
svc.AssertNotInstance(a: any, objecttype: str, message: str = ""): bool
Læs instruktionerne til AssertIsInstance for mere information of antagelserne for denne metode.
Returnerer True, hvis strengen A ikke matcher et givet mønster med jokertegn.
svc.AssertNotLike(a: any, pattern: str = "", message: str = ""): bool
Læs instruktionerne for AssertLike for mere information om antagelserne for denne metode.
Returnerer True, undtagen når A er et objekt som har værdien Nothing.
svc.AssertNotNothing(a: any, message: str = ""): bool
Returnerer True, undtagen når A har værdien Null.
svc.AssertNotNull(a: any, message: str = ""): bool
Returnerer True, når A ikke er en streng eller ikke matcher det angivne regulære udtryk.
svc.AssertNotRegex(a: any, regex: str = "", message: str = ""): bool
Sammenligningen skelner mellem store og små bogstaver.
Returnerer True når strengen A matcher det angivne regulære udtryk.
svc.AssertRegex(a: any, regex: str = "", message: str = ""): bool
Sammenligningen skelner mellem store og små bogstaver.
Returnerer True, når udtrykket A er en Boolean (boolsk udtryk), og udtrykkets værdi er True.
svc.AssertTrue(a: any, message: str = ""): bool
Tvinger en test til at mislykkes.
svc.Fail(message: str = "")
Der kan leveres en besked, der skal rapporteres i konsollen.
Skriver den angivne message (besked) i konsollen.
svc.Log(message: str = "")
Der kan leveres en besked, der skal rapporteres i konsollen.
Viser et beskedfelt med en besked og de aktuelle egenskabsværdier for Exception-tjenesten.
Denne metode bruges ofte i undtagelseshåndterings-sektionen af den Sub, som indeholder den testcase der er nået, når en påstand fejler eller når Fail-metoden bliver kaldt.
svc.ReportError(message: str = "")
Afhængigt af værdien af egenskaben WhenAssertionFails kan testafviklingen fortsætte eller blive afbrudt.
Når du skriver testcases er det anbefalet at inkludre et kald til metoden ReportError i undtagelseshåndterings-sektionen af den tilhørende Sub.
Hvis egenskaben LongMessage er lig med True, så følges den angivne message (besked) af standard-fejlmeldingsbeskrivelsen. Eller vises kun message.
Udfører hele testpakken implementeret i det angivne modul. Hver testcase køres uafhængigt af hinanden.
Kørsel af en testsamling består af:
Afvikling af den valgfrie Setup-metode, hvis den findes i modulet.
Afvikling én gang af hver testcase, uden nogen bestemt rækkefølge.
Afvikling af den valgfrie TearDown-metode, hvis den findes i modulet.
svc.RunTest(testsuite: str, testcasepattern: str = "", message: str = ""): int
Argumentet testcasepattern (testcase_mønster) angiver et mønster med "?" og "*" jokertegn til at udvælge, hvilke testcases der skal udføres. Sammenligningen skelner ikke mellem store og små bogstaver.
Hvis argumentet message (besked) er angivet, skrives det på konsollen når testet starter.
Afbryder den igangværende testsamling uden at kalde TearDown-metoden.
At skippe en test giver normalt mest mening under Setup-metoden, hvis ikke alle betingelser for at køre testen er opfyldt.
Det er op til Setup-metoden at afslutte Sub kort efter kaldet af SkipTest.
Hvis SkipTest bliver inde fra en testcase, så bliver afviklingen af testsamlingen afbrudt, og de tilbageværende testcases bliver ikke kørt. Husk at testcasene i en testsamling udføres i vilkårlig rækkefølge.
svc.SkipTest(message: str = "")
Hvis argumentet message (besked) er angivet, bliver det skrevet til konsollen.