Storitev SFDocuments.UnitTest

Storitev UnitTest ponuja ogrodje za samodejne preizkuse enot z rabo jezika Basic, vključno z naslednjimi možnostmi:

note

Tako testni primeri kot koda, ki jo preizkušate, mora biti zapisana v programskem jeziku Basic. Koda, ki jo preizkušate, lahko kliče funkcije, zapisane v drugih jezikih.


warning

Storitev UnitTest ni na voljo za skripte v Pythonu.


Definicije

Testni primer

Testni primer (angl. test case) je posamezna enota preizkusa. Preveri določen odziv na dani vnos.

V storitvi UnitTest predstavlja testni primer posamezna procedura Sub v Basicu, katere ime se začne s skupno predpono (privzeto je to »Test_«).

Če testni primer spodleti, ena od metod AssertX vrne False.

Nabor testov

Nabor testov (angl. test suite) je zbirka testnih primerov, ki jih je potrebno izvesti skupaj.

Vsi testni primeri nabora testov so shranjeni v enem samem modulu Basic.

Nabor testov lahko implementira metodi SetUp in TearDown za pripravo testnih primerov v svojem modulu.

Test modula

Preizkus celotnega modula sestavlja več naborov testov v isti knjižnici Basic.

Priklic storitve

Pred uporabo storitve UnitTest je potrebno naložiti ali uvoziti knjižnico ScriptForge:

note

• Za makre Basic mora biti naložena knjižnica ScriptForge z naslednjim ukazom:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Za skripte Python mora biti opravljen uvoz iz modula scriptforge:
from scriptforge import CreateScriptService


Enostavni način

Storitev prikličite v enostavnem načinu, da kliče funkcije AssertX brez potrebe po izgradnji polne hierarhije naborov testov in testnih primerov.

V enostavnem načinu se storitev kliče v samem testnem primeru, kar prikazuje spodnji primer:


    Sub SimpleTest
        On Local Error GoTo CatchError
        Dim myTest As Variant
        myTest = CreateScriptService("UnitTest")
        ' Nekaj praznih testov
        myTest.AssertEqual(1 + 1, 2)
        myTest.AssertEqual(1 - 1, 0)
        MsgBox("Vsi testi so uspeli")
        Exit Sub
    CatchError:
        myTest.ReportError("Preizkus je spodletel")
    End Sub
  

Če v tem primeru kateri od klicev AssertEqual spodleti, se tolmač pomakne k oznaki CatchError in poroča o napaki s klicem metode ReportError.

Polni način

Če je priklicana v polnem načinu, se storitev tvori izven kode testa in vsi testi so organizirani v nabore testov in teste modulov v eni sami knjižnici.

Naslednji primer ustvari instanco UnitTest, katere testi se nahajajo v trenutnem dokumentu (ThisComponent) v knjižnici »Tests«.


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

Minimalističen primer v polnem načinu

Upoštevajte, da ima datoteka ODS v svoji knjižnici »Standard« modul »MathUtils« z naslednjo kodo:


    ' Koda v modulu Standard.MathUtils
    Function Sum(a, b) As Double
        Sum = a + b
    End Function
    
    Function Multiply(a, b) As Double
        Multiply = a * b
    End Function
  

Za izdelavo polnega nabora testov vzemimo, da ustvarimo novo knjižnico »Tests« v datoteki z enim samim modulom »AllTests«, ki vsebuje spodnjo kodo:


    ' Koda v modulu 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)
        ' Pripravljalna koda, izvedena pred prvim testnim primerom
        Dim exc As Variant
        exc = CreateScriptService("Exception")
        exc.Console(Modal := False)
    End Sub
    
    Sub TearDown(test)
        ' Neobvezna koda čiščenja, klicana po zadnjem testnem primeru
    End Sub
    
    Sub Test_Sum(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Sum(1, 1), 2, "Vsota dveh pozitivnih celih števil")
        test.AssertEqual(Sum(-10, 20), 10, "Vsota negativnega in pozitivnega celega števila")
        test.AssertEqual(Sum(1.5, 1), 2.5, "Vsota vrednosti števila s plavajočo vejico in celega števila")
        Exit Sub
    CatchError:
        test.ReportError("Metoda Sum je okvarjena")
    End Sub
    
    Sub Test_Multiply(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Multiply(2, 2), 4, "Zmnožek dveh pozitivnih celih števil")
        test.AssertEqual(Multiply(-4, 2), -8, "Zmnožek negativnega in pozitivnega celega števila")
        test.AssertEqual(Multiply(1.5, 3), 4.5, "Zmnožek vrednosti števila s plavajočo vejico in celega števila")
        Exit Sub
    CatchError:
        test.ReportError("Metoda Multiply je okvarjena")
    End Sub
  

Zgornji test modula sestavljata nabora testov Test_Sum in Test_Multiply. Za izvajanje vseh testov enostavno zaženite metodo Main iz modula »AllTests«.

Console iz storitve Exception se uporablja kot privzeti izhod za izpis rezultatov testov. Po izvajanju zgornjega primera se bo v konzoli prikazal naslednji izpis:


    ' 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)
  

Če katera od metod AssertEqual spodleti med temi preizkusi, se v konzolo doda ustrezno sporočilo.

Lastnosti

Ime

Samo za branje

Vrsta

Opis

LongMessage

Ne

Boolean

Če je nastavljeno na True (privzeto), konzola prikaže standardno sporočilo, dodano sporočilu, ki ga zagotovi preizkuševalec. Če je False, bo uporabljeno le sporočilo, ki ga je določil preizkuševalec.

ReturnCode

Da

Integer

Vrednost, ki jo vrne RunTest po zaključku nabora testov. Sledi seznam možnih vrednosti:

0 – Test se je končal brez napak ali se sploh ni začel.
1 – Validacijska točka v testnem primeru je vrnila False.
2 – Metoda Setup ali eden od testnih primerov je podal SkipTest.
3 – Nenormalen konec testa.

Verbose

Ne

Boolean

Če je nastavljeno na True, v konzoli poroča o vseh validacijskih točkah (spodletelih in uspelih). Če je False (privzeto), poroča le o validacijskih točkah, kjer je test spodletel.

WhenAssertionFails

Ne

Integer

Določa, kaj se zgodi, ko validacijska točka spodleti. Sledi seznam možnih vrednosti:

0 – Prezri neuspeh in nadaljuj z izvajanjem testa.
1 – Metoda TearDown v modulu je izvedena v trenutni zbirki testov in naslednja zbirka je zagnana (privzeto v polnem načinu).
2 – Nemudoma ustavi (privzeto v enostavnem načinu).


Seznam metod v storitvi 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


Argumenti metod AssertX

Vse validacijske točke preizkušajo enega ali dva izraza, na katera se v preostanku strani pomoči sklicujemo kot na A in B. To je vedno prvi oz. prva argumenta metode AssertX.

Vse metode AssertX sprejmejo argument message, ki določa sporočilo po meri, ki bo poslano v konzolo glede validacijske točke. Privzeto se uporabi prazen niz. Ta argument je vedno na zadnjem položaju validacijske točke.

Nekatere metode AssertX sprejmejo tudi dodatne argumente, kot to opisuje spodnja skladnja.

AssertAlmostEqual

Vrne True, če sta A in B številski vrednosti in štejeta za bližnji pri dani relativni toleranci.

Skladnja:

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

Ta validacijska točka vrne True, če sta izpolnjena sledeča pogoja:

AssertEqual

Vrne True, ko A in B veljata za enaka.

Skladnja:

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

Če sta A in B skalarja, vrne True, če:

Če sta A in B polji, vrne True, če:

AssertFalse

Vrne True, če je A vrste Boolean in je njena vrednost False.

Skladnja:

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

AssertGreater

Vrne True, če je A večji od B.

Skladnja:

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

Primerjava med A in B predvideva naslednje:

AssertGreaterEqual

Vrne True, če je A večji ali enak B.

Skladnja:

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

Primerjava med A in B predvideva naslednje:

AssertIn

Vrne True, če najde A v B.

Skladnja:

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

Ta validacijska točka predvideva naslednje:

AssertIsInstance

Vrne True, če je A instanca navedene vrste predmeta, določena kot niz, ki vsebuje ime vrste.

Skladnja:

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

Izraz A je lahko nekaj od naslednjega:

AssertIsNothing

Vrne True, če je A predmet, ki ima vrednost Nothing.

Skladnja:

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

AssertIsNull

Vrne True, če ima A vrednost Null.

Skladnja:

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

AssertLess

Vrne True, če je A manjši od B.

Skladnja:

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

Primerjava med A in B predvideva naslednje:

AssertLessEqual

Vrne True, če je A manjši ali enak B.

Skladnja:

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

Primerjava med A in B predvideva naslednje:

AssertLike

Vrne True, če se niz A ujema z danim vzorcem, ki vsebuje nadomestne znake.

Skladnja:

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

Podprti so naslednji nadomestni znaki:

AssertNotAlmostEqual

Vrne True, če sta A in B številski vrednosti in ne štejeta za bližnji pri dani relativni toleranci.

Skladnja:

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

Ta validacijska točka vrne True, če sta izpolnjena sledeča pogoja:

AssertNotEqual

Vrne True, ko A in B ne veljata za enaka.

Skladnja:

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

Ta metoda deluje tako s skalarji kot polji. Preberite navodila za AssertEqual, kjer najdete podrobnosti o pomenu ekvivalence za to validacijsko točko.

AssertNotIn

Vrne True, če A (niz) ne najde v B.

Skladnja:

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

Preberite navodila za AssertIn, kjer najdete podrobnosti o predpostavkah te metode.

AssertNotInstance

Vrne True, če A ni instanca navedene vrste predmeta.

Skladnja:

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

Preberite navodila za AssertIsInstance, kjer najdete podrobnosti o predpostavkah te metode.

AssertNotLike

Vrne True, če se niz A ne ujema z danim vzorcem, ki vsebuje nadomestne znake.

Skladnja:

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

Preberite navodila za AssertLike, kjer najdete podrobnosti o predpostavkah te metode.

AssertNotNothing

Vrne True, razen če je A predmet, ki ima vrednost Nothing.

Skladnja:

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

AssertNotNull

Vrne True, razen če ima A vrednost Null.

Skladnja:

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

AssertNotRegex

Vrne True, če A ni niz oz. se ne ujema z danim regularnim izrazom.

Skladnja:

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

Primerjava razlikuje med velikimi in malimi črkami.

AssertRegex

Vrne True, če se niz A ujema z danim regularnim izrazom.

Skladnja:

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

Primerjava razlikuje med velikimi in malimi črkami.

AssertTrue

Vrne True, če je izraz A vrste Boolean in je njegova vrednost True.

Skladnja:

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

Fail

Vsili, da testni primer spodleti.

Skladnja:

svc.Fail(message: str = "")

Podano je lahko sporočilo, ki bo posredovano v konzolo.

Log

Zapiše navedeni message v konzolo.

Skladnja:

svc.Log(message: str = "")

Podano je lahko sporočilo, ki bo posredovano v konzolo.

ReportError

Prikaže okno s sporočilom in trenutnimi vrednostmi lastnosti storitve Exception.

Ta metoda se pogosto uporablja v kodi ravnanja z izjemami v podprogramu Sub, ki vsebuje testni primer, ki jo doseže, ko validacijska točka spodleti ali ko je klicana metoda Fail.

Skladnja:

svc.ReportError(message: str = "")

Izvajanje testa se lahko glede na vrednost lastnosti WhenAssertionFails nadaljuje ali prekine.

Pri pisanju testnih primerov priporočamo, da vključite klic metode ReportError pri obravnavi izjem v podprogramu Sub.

Če je lastnost LongMessage enaka True, navedenemu sporočilu message sledi standardni opis sporočila o napaki. Sicer se prikaže le message.

RunTest

Izvede celoten nabor testov, implementiran v danem modulu. Vsak testni primer se izvede neodvisno od drugega.

Izvajanje testa modula sestavlja:

  1. Izvajanje neobvezne metode Setup, prisotne v modulu.

  2. Enkratno izvajanje vsakega testnega primera, v poljubnem zaporedju.

  3. Izvajanje neobvezne metode TearDown, prisotne v modulu.

Skladnja:

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

Argument testcasepattern je vzorec, sestavljen iz nadomestnih znakov »?« in »*«, ki določa izbor testov, ki bodo izvedeni. Primerjava ne razlikuje med velikimi in malimi črkami.

Če je podan message, se zapiše v konzolo, ko se začne preizkus.

SkipTest

Prekine izvajanje nabora testov brez klica metode TearDown.

Preskok testa je običajno smiseln med izvajanjem metode Setup, če vsi pogoji za izvajanje testa niso izpolnjeni.

Naloga metode Setup je, da zapusti podprogram Sub takoj po klicu SkipTest.

Če je SkipTest klicana iz samega testnega primera, se izvajanje nabora testov prekine in preostali testni primeri se ne izvedejo. Upoštevati je potrebno, da je zaporedje izvajanja testnih primerov v naboru testov poljubno.

Skladnja:

svc.SkipTest(message: str = "")

Če je podan message, se zapiše v konzolo.

Podprite nas!