Tenesta SFUnitTest.UnitTest

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

note

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.


warning

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:

note

• 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 eksemplet 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:

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:

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

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:

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:

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:

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:

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:

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:

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:

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:

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 unnatakshansamingsdelen 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 å inkludera eit kall til metoden ReportError i unnatakshandsamingsdelen 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.

Støtt oss!