Innhold
Innholdsliste 🔎︎

# SFUnitTests.UnitTest tjeneste

Tjenesten UnitTest gir et rammeverk for å automatisere enhetstester ved å bruke Basic-språket, inkludert muligheten til å:

- Samle testtilfeller i testsuiter og enhetstester.

- Del oppsetts- og avslutningskode blant testtilfeller.

- Rapporter testresultater ved hjelp av konsollen.

Både enhetstestene og koden som skal testes skal skrives i Basic. Koden som testes kan kalle funksjoner skrevet på andre språk.

Tjenesten UnitTest er ikke tilgjengelig for Python-skript.

## Definisjoner

### Testtilfelle

Et testtilfelle er den individuelle testenheten. Den ser etter en spesifikk respons på et bestemt sett med input.

I UnitTest-tjenesten er et testtilfelle representert av en enkel Basic Sub hvis navn starter med et vanlig prefiks (standard er "Test_").

Testtilfellet mislykkes hvis en av AssertX-metodene returnerer Usann.

### Testsuite

En testpakke er en samling av testtilfeller som bør utføres sammen.

Alle testtilfeller av en testpakke er lagret i en enkelt Basic-modul.

En testpakke kan implementere metodene SetUp og TearDown for å forberede seg på testtilfeller i modulen.

### Enhetstest

En full enhetstest består av et sett med testsuiter i det samme Basic-biblioteket.

## Tjenestepåkallelse

Før du bruker UnitTest-tjenesten, må ScriptForge-biblioteket lastes eller importeres:

• Grunnleggende makroer krever å laste ScriptForge-biblioteket ved hjelp av følgende setning:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Python-skript krever import fra scriptforge-modulen:
fra scriptforge import CreateScriptService

### Enkel modus

Påkall tjenesten i enkel modus for å kalle AssertX-funksjoner uten å måtte bygge hele hierarkiet av testpakker og testtilfeller.

I enkel modus påkalles tjenesten inne i testsaken, som vist i eksemplet nedenfor:

        Sub SimpleTest
            On Local Error GoTo CatchError
            Dim myTest As Variant
            myTest = CreateScriptService("UnitTest")
            ' Noen få dummy-tester
            myTest.AssertEqual(1 + 1, 2)
            myTest.AssertEqual(1 - 1, 0)
            MsgBox("Alle tester bestått")
            Exit Sub
        CatchError:
            myTest.ReportError("En test feilet")
        End Sub

I dette eksemplet, hvis noen av AssertEqual-kallene mislykkes, vil tolken gå til CatchError-etiketten og rapportere feilen ved å kalle ReportError-metoden .

### Full modus

Når den startes i full modus, er tjenesteopprettelsen eksternt i forhold til testkoden, og alle testene er organisert i testtilfeller og testsuiter i et enkelt bibliotek.

Følgende eksempel oppretter en UnitTest-forekomst hvis tester er plassert inne i det gjeldende dokumentet (ThisComponent) i "Tests"-biblioteket.

        GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
        Dim myUnitTest As Variant
        myUnitTest = CreateScriptService("UnitTest", ThisComponent, "Tests")

### Et minimalistisk eksempel i full modus

Tenk på at en ODS-fil har en modul kalt "MathUtils" i "Standard"-biblioteket med følgende kode:

        ' Kode i modulen 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 å lage en full testpakke, tenk på at et nytt bibliotek kalt "Tester" er opprettet i filen med en enkelt modul "AllTests" som inneholder koden nedenfor:

        ' Kode i modulen 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 kjørte før den første testsaken
            Dim exc As Variant
            exc = CreateScriptService("Exception")
            exc.Console(Modal := False)
        End Sub

        Sub TearDown(test)
            ' Valgfri oppryddingskode kalt etter siste testtilfelle
        End Sub

        Sub Test_Sum(test)
            On Local Error GoTo CatchError
            test.AssertEqual(Sum(1, 1), 2, "Sum to positive heltall")
            test.AssertEqual(Sum(-10, 20), 10, "Sum av negative og positive heltall")
            test.AssertEqual(Sum(1.5, 1), 2.5, "Sum av desimal- og heltallsverdier")
            Exit Sub
        CatchError:
            test.ReportError("Summetoden er ødelagt")
        End Sub

        Sub Test_Multiply(test)
            On Local Error GoTo CatchError
            test.AssertEqual(Multiply(2, 2), 4, "Multipliser to positive heltall")
            test.AssertEqual(Multiply(-4, 2), -8, "Multipliser negative og positive heltall")
            test.AssertEqual(Multiply(1.5, 3), 4.5, "Multiplikasjon av flyte- og heltallsverdier")
            Exit Sub
        CatchError:
            test.ReportError("Multiplikasjonsmetoden er ødelagt")
        End Sub

Testpakken ovenfor består av to testtilfeller Test_Sum og Test_Multiply. For å kjøre alle testene, kjør Hoved-metoden fra "AllTests"-modulen.

Konsoll fra Exception-tjenesten er brukes som standard utgang for å skrive ut testresultater. Etter å ha kjørt eksemplet ovenfor, vil følgende utgang vises 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 noen av AssertEqual-metodene mislykkes under disse testene, legges en feilmelding til konsollen.

## Egeskaper

Navn | Skrivebeskyttet | Type | Beskrivelse
--- | --- | --- | ---
LongMessage | Nei | Boolean | Når satt til True (standard) viser konsollen standardmeldingen som er lagt til meldingen levert av testeren. Når Usann, brukes bare meldingen som er definert av testeren.
ReturnCode | Ja | Integer | Verdi returnert av RunTest etter at enhetstesten er fullført. Neste er en liste over mulige verdier: 0 - Test fullført uten feil eller test ikke startet 1 - En påstand i en testsak returnert Usann 2 - En SkipTest ble utstedt av Oppsett-metoden eller ved en av testtilfellene. 3 - Unormal slutt på testen
Verbose | Nei | Boolean | Når satt til Sann, rapporteres alle påstander i konsollen (mislykket eller ikke). Når Usann (standard), rapporteres kun feilaktige påstander.
WhenAssertionFails | Nei | Integer | Definerer hva som gjøres når en påstand feiler. Neste er en liste over mulige verdier: 0 - Ignorer feilen og fortsett å kjøre testen 1 - TearDown-metoden i modulen utføres i den gjeldende testpakken og neste suite startes (standard i full modus). 2 - Stopp umiddelbart (standard i enkel modus)

Liste over metoder i Enhetstest-tjenesten
AssertAlmostEqual AssertEqual AssertFalse AssertGreater AssertGreaterEqual AssertIn AssertIsInstance AssertIsNothing AssertLike | AssertNotRegex AssertIsNull AssertLess AssertLessEqual AssertNotAlmostEqual AssertNotEqual AssertNotIn AssertNotInstance AssertNotLike | AssertNotNothing AssertNotNull AssertRegex AssertTrue Fail Log ReportError RunTest SkipTest

## Argumenter for AssertX-metodene

Alle påstander tester ett eller to uttrykk, i resten av denne hjelpesiden referert til som A og B. De er alltid de første eller to argumentene i AssertX-metoden.

Alle AssertX-metoder godtar et melding-argument som spesifiserer en egendefinert melding som skal rapporteres i konsollen angående påstanden. Som standard brukes en tom streng. Dette argumentet er alltid i siste posisjon i påstanden.

Noen AssertX-metoder godtar også tilleggsargumenter, som er beskrevet av deres syntakser nedenfor.

## AssertAlmostEqual

Returnerer True når A og B er numeriske verdier og anses å være nær hverandre, gitt en relativ toleranse.

### Syntaks:

svc.AssertAlmostEqual(a: any, b: any, tolerance: double = 1E-09, message: str = ""): bool

Denne påstanden returnerer Sann hvis de to betingelsene nedenfor er oppfylt:

- A og B kan konverteres til typen Dobbel.

- Den absolutte forskjellen mellom A og B delt på den største absolutte verdien av A eller B er lavere enn verdien spesifisert i toleranse.

## AssertEqual

Returnerer Sann når A og B anses å være like.

### Syntaks:

svc.AssertEqual(a: any, b: any, message: str = ""): bool

Når A og B er skalarer, returneres Sann hvis:

- Begge uttrykkene har samme VarType eller er begge numeriske.

- Boolske og numeriske verdier sammenlignes med =-operatoren.

- Strenger sammenlignes med den innebygde StrComp-funksjonen. Sammenligningen skiller mellom store og små bokstaver.

- Datoer og klokkeslett sammenlignes opp til sekundet.

- Null, Tom og Ingenting er ikke like, men AssertEqual(Nothing, Nothing) returnerer Sann.

- UNO-objekter sammenlignes med den innebygde EqualUnoObjects-metoden.

- Merk at Basic-objekter aldri er like.

Når A og B er matriser, returneres Sann hvis:

- Begge matrisene har samme antall dimensjoner (opptil 2 dimensjoner), og deres nedre og øvre grenser er identiske for alle dimensjoner.

- Alle elementer i begge matrisene er like, én etter én.

- To tomme matriser anses å være like.

## AssertFalse

Returnerer True når typen A er Boolsk og verdien er Usann.

### Syntaks:

svc.AssertFalse(a: any, message: str = ""): bool

## AssertGreater

Returnerer Sann når A er større enn B.

### Syntaks:

svc.AssertGreater(a: any, b: any, message: str = ""): bool

Sammenligningen mellom A og B forutsetter følgende:

- Kvalifiserte datatyper er Streng, Dato eller numeriske.

- Begge uttrykkene må ha samme VarType eller begge må være numeriske.

- Strengesammenligninger skiller mellom store og små bokstaver.

## AssertGreaterEqual

Returnerer Sann når A er større enn eller lik B.

### Syntaks:

svc.AssertGreaterEqual(a: any, b: any, message: str = ""): bool

Sammenligningen mellom A og B forutsetter følgende:

- Kvalifiserte datatyper er Streng, Dato eller numeriske.

- Begge uttrykkene må ha samme VarType eller begge må være numeriske.

- Strengesammenligninger skiller mellom store og små bokstaver.

## AssertIn

Returnerer Sann når A er funnet i B.

### Syntaks:

svc.AssertIn(a: any, b: any, message: str = ""): bool

Denne påstanden forutsetter følgende:

- Uttrykk B kan være en 1D-matrise, et ScriptForge Ordbok-objekt eller en streng.

- Når uttrykk B er en 1D-matrise, kan uttrykk A være en dato eller en numerisk verdi.

- Når uttrykk B er et ScriptForge Ordbok-objekt, søkes det etter streng A blant nøklene i B.

- Strengesammenligninger skiller mellom store og små bokstaver.

## AssertIsInstance

Returnerer True når A er en forekomst av en spesifisert objekttype, spesifisert som en streng som inneholder typenavnet.

### Syntaks:

svc.AssertIsInstance(a: any, objecttype: str, message: str = ""): bool

Uttrykk A kan være ett av følgende:

- Et ScriptForge-objekt. I dette tilfellet er objecttype-argumentet en streng som "DICTIONARY", "calc", "Dialog" osv.

- Et UNO-objekt. I dette tilfellet må objecttype-argumentet være en streng som er identisk med verdien som returneres av metoden SF_Session.UnoObjectType().

- En matrise. I dette tilfellet forventes objecttype-argumentet å være "matrise".

- Enhver annen variabel (verken et Objekt eller en Matrise). I dette tilfellet er objekttype en streng som samsvarer med verdien som returneres av den innebygde funksjonen TypeName.

## AssertIsNothing

Returnerer Sann når A er et objekt som har Ingenting-verdien.

### Syntaks:

svc.AssertIsNothing(a: any, message: str = ""): bool

## AssertIsNull

Returnerer Sann når A har Null-verdien.

### Syntaks:

svc.AssertIsNull(a: any, message: str = ""): bool

## AssertLess

Returnerer True når A er mindre enn B.

### Syntaks:

svc.AssertLess(a: any, b: any, message: str = ""): bool

Sammenligningen mellom A og B forutsetter følgende:

- Kvalifiserte datatyper er Streng, Dato eller numeriske.

- Begge uttrykkene må ha samme VarType eller begge må være numeriske.

- Strengesammenligninger skiller mellom store og små bokstaver.

## AssertLessEqual

Returnerer Sann når A er mindre enn eller lik B.

### Syntaks:

svc.AssertLessEqual(a: any, b: any, message: str = ""): bool

Sammenligningen mellom A og B forutsetter følgende:

- Kvalifiserte datatyper er Streng, Dato eller numeriske.

- Begge uttrykkene må ha samme VarType eller begge må være numeriske.

- Strengesammenligninger skiller mellom store og små bokstaver.

## AssertLike

Returnerer True hvis streng A samsvarer med et gitt mønster som inneholder jokertegn.

### Syntaks:

svc.AssertLike(a: any, pattern: str = "", message: str = ""): bool

Følgende jokertegn godtas:

- ? - Representerer et enkelt tegn.

- * - Representerer null, ett eller flere tegn.

## AssertNotAlmostEqual

Returnerer True når A og B er numeriske verdier og ikke anses å være nær hverandre, gitt en relativ toleranse.

### Syntaks:

svc.AssertNotAlmostEqual(a: any, b: any, tolerance: double = 1E-09, message: str = ""): bool

Denne påstanden returnerer True hvis de to betingelsene nedenfor er oppfylt:

- A og B kan konverteres til typen Dobbel.

- Den absolutte forskjellen mellom A og B delt på den største absolutte verdien av A eller B er større enn verdien spesifisert i toleranse.

## AssertNotEqual

Returnerer True når A og B ikke anses å være like.

### Syntaks:

svc.AssertNotEqual(a: any, b: any, message: str = ""): bool

Denne metoden fungerer både for skalarer og matriser. Les instruksjonene i AssertEqual for mer informasjon om hva likhet betyr i denne påstand.

## AssertNotIn

Returnerer Sann når A (en streng) ikke finnes i B.

### Syntaks:

svc.AssertNotIn(a: any, b: any, message: str = ""): bool

Les instruksjonene i AssertIn for mer informasjon om forutsetningene for denne metoden .

## AssertNotInstance

Returnerer True når A ikke er en forekomst av en spesifisert objekttype.

### Syntaks:

svc.AssertNotInstance(a: any, objecttype: str, message: str = ""): bool

Les instruksjonene i AssertIsInstance for mer informasjon om forutsetningene for denne metoden .

## AssertNotLike

Returnerer True hvis streng A ikke samsvarer med et gitt mønster som inneholder jokertegn.

### Syntaks:

svc.AssertNotLike(a: any, pattern: str = "", message: str = ""): bool

Les instruksjonene i AssertLike for mer informasjon om forutsetningene for denne metoden .

## AssertNotNothing

Returnerer True bortsett fra når A er et objekt som har Ingenting-verdien.

### Syntaks:

svc.AssertNotNothing(a: any, message: str = ""): bool

## AssertNotNull

Returnerer True bortsett fra når A har Null-verdien.

### Syntaks:

svc.AssertNotNull(a: any, message: str = ""): bool

## AssertNotRegex

Returnerer True når A ikke er en streng eller ikke samsvarer med det gitte regulære uttrykket.

### Syntaks:

svc.AssertNotRegex(a: any, regex: str = "", message: str = ""): bool

Sammenligningen skiller mellom store og små bokstaver.

## AssertRegex

Returnerer True når streng A samsvarer med det gitte regulære uttrykket.

### Syntaks:

svc.AssertRegex(a: any, regex: str = "", message: str = ""): bool

Sammenligningen skiller mellom store og små bokstaver.

## AssertTrue

Returnerer Sann når uttrykk A er en boolesk og verdien er Sann.

### Syntaks:

svc.AssertTrue(a: any, message: str = ""): bool

## Fail

Tvinger en test til å mislykkes.

### Syntaks:

svc.Fail(message: str = "")

En melding kan gis som skal rapporteres i konsollen.

## Log

Skriver den spesifiserte meldingen i konsollen.

### Syntaks:

svc.Log(message: str = "")

En melding kan gis som skal rapporteres i konsollen.

## ReportError

Viser en meldingsboks med en melding og gjeldende egenskapsverdier for Unntak-tjenesten.

Denne metoden brukes ofte i unntakshåndteringsdelen av Sub som inneholder testsaken, som nås når en påstand mislykkes eller når Fail-metoden kalles.

### Syntaks:

svc.ReportError(message: str = "")

Avhengig av verdien av egenskapen WhenAssertionFails, kan testkjøringen fortsette eller bli avbrutt.

Når du skriver testtilfeller, anbefales det å inkludere et kall til ReportError-metoden i unntakshåndteringsdelen av Sub.

Hvis egenskapen LongMessage er lik True, blir den spesifiserte meldingen fulgt av standard feilmeldingsbeskrivelsen. Ellers vises bare meldingen.

## RunTest

Utfører hele testpakken implementert i den angitte modulen. Hver testcase kjøres uavhengig av hverandre.

Å kjøre en testpakke består av:

1. Kjøre den valgfrie Setup-metoden som finnes i modulen.

2. Utføres én gang i hvert testtilfelle, uten spesifikk rekkefølge.

3. Kjøre den valgfrie TearDown-metoden som finnes i modulen.

### Syntaks:

svc.RunTest(testsuite: str, testcasepattern: str = "", message: str = ""): int

Argumentet testcasepattern spesifiserer et mønster som består av "?" og "*" jokertegn for å velge hvilke testtilfeller som skal kjøres. Sammenligningen skiller ikke mellom store og små bokstaver.

Hvis en melding er gitt, skrives den til konsollen når testen starter.

## SkipTest

Avbryter den kjørende test-siuten uten å kalle TearDown-metoden.

Å hoppe over en test er vanligvis meningsfullt under Oppsett-metoden når ikke alle betingelsene for å kjøre testen er oppfylt.

Det er opp til Setup-metoden å avslutte Sub kort tid etter SkipTest-anropet.

Hvis SkipTest kalles opp fra en testsak, avbrytes kjøringen av testpakken og de gjenværende testsakene kjøres ikke. Husk at rekkefølgen testtilfellene kjøres i er vilkårlig i en testpakke.

### Syntaks:

svc.SkipTest(message: str = "")

Hvis en melding er gitt, skrives den til konsollen.

Lignende emner

ScriptForge.Unntak-tjeneste