Innhald

# Tenesta SFUnitTest.UnitTest

Tenesta UnitTest gjev eit rammeverk for å automatisere testar av einingar ved å bruka BASIC-språket, medrekna høve til å:

- Oppsummer testtilfelle i testsuiter og einingstestar.

- Dela setup- og shutdown-kode mellom test-tilfella.

- Rapportera testresultata ved hjelp av konsollen.

Både einingstestane og koden som skal testast må skrivast i BASIC. Koden som vert testa kan kalla opp funksjonar skrive i andre språk.

Tenesta UnitTest er ikkje tilgjengeleg for Python-skript.

## Definisjonar

### Testtilfelle

Eit testtilfelle er den individuelle testeininga. Det ser etter ein spesifikk respons i eit bestemt sett med inndata.

I tenesta UnitTest er eit testtilfelle representert av ein enkel BASIC-Sub der namnet byrjar med eit vanleg prefiks (standard er "Test_").

Testtilfellet er mislukka viss ein av metodane AssertX returnerer Usann.

### Testsuite

Ein testsuite er ei samling av testtilfelle som bør utførast saman.

Alle testtilfella av ein testsuite er lagra i ein enkelt BASIC-modul.

Ein testsuite kan implementera metodane SetUp og TearDown for å gjera seg klar for testtilfelle i modulen.

### Einingstest

Ein full einingstest inneheld eit sett med testsuiter i det same Basic-biblioteket.

## Oppkall av tenester

Før du brukar tenesta UnitTest må biblioteket ScriptForge vera lasta inn eller importert:

• Grunnleggjande makroar krev innlasting av biblioteket ScriptForge ved hjelp av denne setninga:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
• Python-skript krev import frå scriptforge-modulen:
from scriptforge import CreateScriptService

### Enkel modus

Påkall tenesta i enkel modus for å kalla opp AssertX-funksjonar utan å måtta byggja opp heile hierarkiet av testsuiter og testtilfelle.

I enkel modus vert tenesta kalla opp inne i testsaken, som vist i eksempelet nedanfor:

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

I dette eksempelet, viss eit av AssertEqual oppkalla ikkje lukkast, går tolken til etiketten CatchError og rapporterer feilen ved å kalla opp metoden ReportError.

### Full modus

Ved oppkall i full modus, skjer tenesteopprettinga eksternt i høve til testkoden, og alle testane er organiserte i testtilfelle og testsuiter i eit enkelt bibliotek.

Eksempelet nedanfor lagar ein førekomst av UnitTest der testane er plasserte inne i det gjeldande dokumentet (ThisComponent) i "Tests"-biblioteket.

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

### Eit minimalistisk eksempel i full modus

Gå ut frå at ei ODS-fil har ein modul kalla "MathUtils" i "Standard"-biblioteket med denne koden:

        ' 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 å laga ei full testpakke, tenk på at eit nytt bibliotek kalla "Tests" er oppretta i fila med ein enkelt modul "AllTests" som inneheld koden nedanfor:

        ' 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)
            ' Førebuingskoden vart utført før det første testtilfellet
            Dim exc As Variant
            exc = CreateScriptService("Exception")
            exc.Console(Modal := False)
        End Sub

        Sub TearDown(test)
            ' Valfri oppryddingskode kalla opp etter siste testtilfelle
        End Sub

        Sub Test_Sum(test)
            On Local Error GoTo CatchError
            test.AssertEqual(Sum(1, 1), 2, "Sum to positive heiltal")
            test.AssertEqual(Sum(-10, 20), 10, "Sum av negative og positive heiltal")
            test.AssertEqual(Sum(1.5, 1), 2.5, "Sum av desimal- og heiltalsverdiar")
            Exit Sub
        CatchError:
            test.ReportError("Summermetoden mislukkast")
        End Sub

        Sub Test_Multiply(test)
            On Local Error GoTo CatchError
            test.AssertEqual(Multiply(2, 2), 4, "Multipliser to positive heiltal")
            test.AssertEqual(Multiply(-4, 2), -8, "Multipliser negative og positive heiltal")
            test.AssertEqual(Multiply(1.5, 3), 4.5, "Multiplikasjon av flyttals- og heiltalsverdiar")
            Exit Sub
        CatchError:
            test.ReportError("Multiplikasjonsmetoden mislukkast")
        End Sub

Testpakken ovanfor inneheld dei to testtilfella Test_Sum og Test_Multiply. For å køyra alle testane, køyr Main-metoden frå modulen «AllTests»".

Konsoll frå tenesta Exception vert brukt som standard utgang for å skriva ut testresultat. Etter å ha køyrt eksempelet ovanfor, vert desse utdataa viste 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)

Viss nokre av AssertEqual-metodane ikkje lukkast under desse testane, vert det lagt ut ei feilmelding i konsollen.

## Eigenskapar

Skriv inn eit namn for objektet | Skriveverna | Type | Beskriving
--- | --- | --- | ---
LongMessage | Nei | Boolean | Når denne er sett til True (standard) viser konsollen standardmeldinga som er lagt til meldinga levert av testaren. Når Usann, vert berre meldinga som er definert av testaren brukt.
ReturnCode | Ja | Integer | Verdi returnert av RunTest etter at einingstesten er fullført. Neste er ei liste over moglege verdiar: 0 – Test fullført utan feil eller test ikkje byrja 1 – Ei utsegn ei testsak returnerte False 2 – Ein SkipTest vart utferda av Setup-metoden eller av eit av testtilfella. 3 – Unormal slutt på testen
Verbose | Nei | Boolean | Når denne er sett til True, vert alle utsegnene rapporterte i konsollen (mislukka eller ikkje). Når False (standard), vert berre mislukka utsegner rapporterte
WhenAssertionFails | Nei | Integer | Definerer kva som skal gjerast når ein påstand feilar. Neste er ei liste over moglege verdiar: 0 – Ignorer feilen og hald fram med å køyra testen 1 – TearDown-metoden i modulen vert utført i den gjeldande testpakken og neste suite vert starta (standard i full modus). 2 – Stopp straks (standard i enkel modus)

Liste over metodar i tenesta «UnitTest»
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

## Argument i metoden «AssertX»

Alle påstandar testar eitt eller to uttrykk, i resten av denne hjelpesida referert til som A og B. Dei er alltid dei første eitt eller to argumenta i metoden AssertX.

Alle AssertX-metodane godtar eit message-argument som spesifiserer ei sjølvdefinert melding som skal rapporterast i konsollen om utsegnet. Som standard vert det brukt ein tom streng. Dette argumentet er alltid på siste plass i utsegnet.

Nokre AssertX-metodar godtek også tilleggsargument som er forklarte av syntaksane deira nedanfor.

## AssertAlmostEqual

Returnerer True når A og B er numeriske verdiar og vert sette å vera nær kvarandre i høve til ein gjeven, relativ toleranse.

### Syntaks:

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

Dette utsegnet returnerer True viss dei to vilkåra nedanfor er oppfylte:

- A og B kan konverterast til typen Double.

- Den absolutte skilnaden mellom A og B delt på den største absolutte verdien av A eller B er lågare enn verdien spesifisert i tolerance.

## AssertEqual

Returnerer True når A og B vert sett på som like.

### Syntaks:

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

Når A og B er skalarar, vert True returnert viss:

- Begge uttrykka har same VarType eller er begge numeriske.

- Boolske og numeriske verdiar vert samanlikna med operatoren =.

- Strengar vert samanlikna med den innebygde StrComp-funksjonen. Samanlikninga skil mellom store og små bokstavar.

- Datoar og klokkeslett vert samanlikna opp til sekundet.

- Null, Empty og Nothing er ikkje like, men AssertEqual(Nothing, Nothing) returnerer True.

- UNO-objekt vert samanlikna med den innebygde EqualUnoObjects-metoden.

- Merk at Basic-objekt aldri er like.

Når A og B er matriser, vert True returnert viss:

- Begge matrisene har same talet på dimensjonar (opptil 2), og dei nedre og øvre grensene er identiske for alle dimensjonane.

- Alle elementa i begge matrisene er like.

- To tomme matriser vert sett på som like.

## AssertFalse

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

### Syntaks:

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

## AssertGreater

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

### Syntaks:

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

Samanlikninga mellom A og B krev følgjande:

- Kvalifiserte datatypar er String, Date eller numeriske.

- Begge uttrykka må ha same VarType eller begge må vera numeriske.

- Strengsamanlikningar skil mellom store og små bokstavar.

## AssertGreaterEqual

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

### Syntaks:

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

Samanlikninga mellom A og B krev følgjande:

- Kvalifiserte datatypar er String, Date eller numeriske.

- Begge uttrykka må ha same VarType eller begge må vera numeriske.

- Strengsamanlikningar skil mellom store og små bokstavar.

## AssertIn

Returnerer True når A er funne i B.

### Syntaks:

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

Ei utsegn krev følgjande:

- Uttrykk B kan vera ei 1D-matrise, eit ScriptForge Dictionary-objekt eller ein streng.

- Når uttrykk B er ei 1D-matrise, kan uttrykket A vera ein dato eller ein numerisk verdi.

- Når uttrykk B er eit ScriptForge Dictionary-objekt, vert det søkt etter streng A mellom nøklane i B.

- Strengsamanlikningar skil mellom store og små bokstavar.

## AssertIsInstance

Returnerer True når A er ein førekomst av ein spesifisert objekttype, spesifisert som ein streng som inneheld typenamnet.

### Syntaks:

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

Uttrykket A kan vera eitt av desse:

- Eit ScriptForge-objekt. I dette tilfellet er objecttype-argumentet ein streng som «DICTIONARY», «calc», «Dialog» osv.

- Eit UNO-objekt. I dette tilfellet må objecttype-argumentet vera ein streng som er identisk med verdien som vert returnert av metoden SF_Session.UnoObjectType().

- Ei matrise. I dette tilfellet går ein ut frå at objecttype-argumentet er ei «matrise».

- Kva annan variabel som helst (korkje eit Objekt eller ei Matrise). I dette tilfellet er objecttype ein streng som svarer til verdien som som vert returnert av den innebygde funksjonen TypeName.

## AssertIsNothing

Returnerer True når A er eit objekt med verdien Nothing.

### Syntaks:

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

## AssertIsNull

Returnerer True når A har verdien Null.

### 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

Samanlikninga mellom A og B krev følgjande:

- Kvalifiserte datatypar er String, Date eller numerisk.

- Begge uttrykka må ha same VarType eller begge må vera numeriske.

- Strengsamanlikningar skil mellom store og små bokstavar.

## AssertLessEqual

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

### Syntaks:

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

Samanlikninga mellom A og B krev følgjande:

- Kvalifiserte datatypar er String, Date eller numerisk.

- Begge uttrykka må ha same VarType eller begge må vera numeriske.

- Strengsamanlikningar skil mellom store og små bokstavar.

## AssertLike

Returnerer True viss streng A samsvarar med eit gjeve mønster som inneheld jokerteikn.

### Syntaks:

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

Desse jokerteikna vert aksepterte:

- ? – står for eitt enkelt teikn

- * – representerer null, eitt eller fleire teikn.

## AssertNotAlmostEqual

Returnerer True når A og B er numeriske verdiar og ikkje vert sette å vera nær kvarandre i høve til ein gjeven, relativ toleranse.

### Syntaks:

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

Dette utsegnet returnerer True viss dei to vilkåra nedanfor er oppfylte:

- A og B kan konverterast til typen Double.

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

## AssertNotEqual

Returnerer True når A og B ikkje vert sett på som like.

### Syntaks:

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

Denne metoden fungerer både for skalarer og matriser. Les instruksjonane i AssertEqual for meir informasjon om kva likskap betyr i denne påstanden.

## AssertNotIn

Returnerer True når A (ein streng) ikkje finst i B.

### Syntaks:

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

Les instruksjonane i AssertIn for meir informasjon om føresetnadane for denne metoden .

## AssertNotInstance

Returnerer True når A ikkje er ein førekomst av ein spesifisert objekttype.

### Syntaks:

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

Les instruksjonane i AssertIsInstance for meir informasjon om føresetnadane for denne metoden .

## AssertNotLike

Returnerer True viss streng A ikkje samsvarar med eit gjeve mønster som inneheld jokerteikn.

### Syntaks:

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

Les instruksjonane i AssertLike for meir informasjon om føresetnadane for denne metoden .

## AssertNotNothing

Returnerer True bortsett frå når A er eit objekt med verdien Nothing.

### Syntaks:

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

## AssertNotNull

Returnerer Truebortsett frå når A har verdien Null.

### Syntaks:

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

## AssertNotRegex

Returnerer True når A ikkje er ein streng eller ikkje samsvarar med det gjevne regulære uttrykket.

### Syntaks:

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

Samanlikninga skil mellom store og små bokstavar.

## AssertRegex

Returnerer True når streng A samsvarar med eit gjeve regulært uttrykk.

### Syntaks:

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

Samanlikninga skil mellom store og små bokstavar.

## AssertTrue

Returnerer True når uttrykket A er Boolsk og verdien er True.

### Syntaks:

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

## Fail

Tvingar ein test til å mislukkast.

### Syntaks:

svc.Fail(message: str = "")

Det kan gjevast ei melding som skal rapporterast i konsollen.

## Log

Skriv den spesifiserte meldinga i konsollen.

### Syntaks:

svc.Log(message: str = "")

Det kan gjevast ei melding som skal rapporterast i konsollen.

## ReportError

Viser ein meldingsboks med ei melding og gjeldande eigenskapsverdiar for Exeption-tenesta.

Denne metoden vert ofte brukt i unntakshansamingsdelen av Sub som inneheld testsaka, som vert nådd når ein påstand mislukkast eller når metoden Fail vert kalla opp.

### Syntaks:

svc.ReportError(message: str = "")

Avhengig av verdien av eigenskapen WhenAssertionFails, kan testkøyringa halda fram eller avbrytast.

Når du skriv testtilfelle, vert det rådd til å ta med eit kall til metoden ReportError i unntakshandsamingsdelen av Sub.

Viss eigenskapen LongMessage er lik True, vert det sett inn ei standard meldingsbeskriving etter den spesifiserte meldinga. Ellers vert berre meldinga vist.

## RunTest

Utfører heile testpakken implementert i den gjevne modulen. Kvart testtilfelle vert køyrd uavhengig av dei andre.

Å køyra ein testpakke består av:

1. Køyra den valfrie Setup-metoden som finst i modulen.

2. Køyra kvart testtilfelle éin gong utan bestemt rekkjefølgje.

3. Køyra den valfrie TearDown-metoden som finst i modulen.

### Syntaks:

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

Argumentet testcasepattern spesifiserer eit mønster sett saman av jokerteikna «?» og «*» for å velja kva testtilfelle som skal køyrast. Samanlikninga skil ikkje mellom store og små bokstavar.

Viss det er gjeve ei melding, vert denne skrive til konsollen når testen byrjar.

## SkipTest

Avbryter den køyrande testsuiten utan å kalla opp TearDown-metoden.

Til vanleg er det meiningsfullt å hoppa over ein test under Setup-metoden når ikkje alle vilkåra for å køyra testen er oppfylte.

Det er opp til Setup-metoden å avslutta Sub kort tid etter oppkallet til SkipTest.

Viss SkipTest vert kalla opp frå ei testsak, vert køyringa av testpakken avbroten og resten av testane vert ikkje utførte. Hugs at rekkjefølgja testtilfella vert køyrde i er vilkårleg i ein testpakke.

### Syntaks:

svc.SkipTest(message: str = "")

Viss det er gjeve ei melding, vert denne skrive til konsollen.

Liknande emne

Tenesta ScriptForge.Exception

Støtt oss!