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.