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.

Supporter oss!