SFUnitTests.UnitTest tjeneste

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

note

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


warning

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:

note

‱ 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:

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:

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

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:

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:

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:

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:

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:

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:

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:

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:

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.