Pomoč LibreOfficeDev 7.6
Storitev UnitTest ponuja ogrodje za samodejne preizkuse enot z rabo jezika Basic, vključno z naslednjimi možnostmi:
Iz testnih primerov tvorite nabore testov in teste modulov.
Delite kodo zagona in izklopa med testnimi primeri.
Poročajte o rezultatih preizkusov z uporabo Console,
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.
Storitev UnitTest ni na voljo za skripte v Pythonu.
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 (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.
Preizkus celotnega modula sestavlja več naborov testov v isti knjižnici Basic.
Pred uporabo storitve UnitTest je potrebno naložiti ali uvoziti knjižnico ScriptForge:
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.
Č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")
  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.
| 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. | 
| 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. | 
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.
Vrne True, če sta A in B številski vrednosti in štejeta za bližnji pri dani relativni toleranci.
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:
A in B je mogoče pretvoriti v vrsto Double.
Absolutna razlika med A in B, deljena z največjo absolutno vrednostjo A ali B, je nižja od vrednosti, določene z vrednostjo tolerance.
Vrne True, ko A in B veljata za enaka.
svc.AssertEqual(a: any, b: any, message: str = ""): bool
Če sta A in B skalarja, vrne True, če:
Oba izraza morata imeti isti VarType ali pa morata biti oba številska.
Logične in številske vrednosti se primerjajo z operatorjem =.
Nizi se primerjajo z vgrajeno funkcijo StrComp. Primerjava razlikuje med malimi in velikimi črkami.
Datumi in časi se primerjajo do sekunde natančno.
Null, Empty in Nothing niso enakovredni, toda AssertEqual(Nothing, Nothing) vrne True.
Predmeti UNO se primerjajo z vgrajeno metodo EqualUnoObjects.
Upoštevajte, da predmeti Basic nikoli niso enaki.
Če sta A in B polji, vrne True, če:
Obe polji imata enako število dimenzij (do dve) in njuni spodnji in zgornji meji sta identični za vse dimenzije.
Vsi elementi v obeh poljih so enaki, eden za drugim.
Dve prazni polji veljata za enakovredni.
Vrne True, če je A vrste Boolean in je njena vrednost False.
svc.AssertFalse(a: any, message: str = ""): bool
Vrne True, če je A večji od B.
svc.AssertGreater(a: any, b: any, message: str = ""): bool
Primerjava med A in B predvideva naslednje:
Ustrezne vrste podatkov so String (niz), Date (datum) ali številske (več vrst).
Oba izraza morata imeti isti VarType ali pa morata biti oba številska.
Primerjava nizov razlikuje med velikimi in malimi črkami.
Vrne True, če je A večji ali enak B.
svc.AssertGreaterEqual(a: any, b: any, message: str = ""): bool
Primerjava med A in B predvideva naslednje:
Ustrezne vrste podatkov so String (niz), Date (datum) ali številske (več vrst).
Oba izraza morata imeti isti VarType ali pa morata biti oba številska.
Primerjava nizov razlikuje med velikimi in malimi črkami.
Vrne True, če najde A v B.
svc.AssertIn(a: any, b: any, message: str = ""): bool
Ta validacijska točka predvideva naslednje:
Izraz B je lahko 1-dimenzionalno polje, predmet Dictionary ScriptForge ali niz.
Če je izraz B 1-dimenzionalno polje, je izraz A lahko datum ali številska vrednost.
Če je izraz B predmet slovarja Dictionary ScriptForge, se niz A išče med ključi v B.
Primerjava nizov razlikuje med velikimi in malimi črkami.
Vrne True, če je A instanca navedene vrste predmeta, določena kot niz, ki vsebuje ime vrste.
svc.AssertIsInstance(a: any, objecttype: str, message: str = ""): bool
Izraz A je lahko nekaj od naslednjega:
Predmet ScriptForge. V tem primeru je argument objecttype niz, kakršni so »DICTIONARY«, »calc«, »Dialog« itn.
Predmet UNO. V tem primeru mora biti argument objecttype niz, identičen vrednosti, ki jo vrne metoda SF_Session.UnoObjectType().
Polje. V tem primeru je pričakovano, da je argument objecttype »array«.
Vsaka druga spremenljivka (niti Object niti Array). V tem primeru je objecttype niz, ki se ujema z vrednostjo, ki jo vrne vgrajena funkcija TypeName.
Vrne True, če je A predmet, ki ima vrednost Nothing.
svc.AssertIsNothing(a: any, message: str = ""): bool
Vrne True, če ima A vrednost Null.
svc.AssertIsNull(a: any, message: str = ""): bool
Vrne True, če je A manjši od B.
svc.AssertLess(a: any, b: any, message: str = ""): bool
Primerjava med A in B predvideva naslednje:
Ustrezne vrste podatkov so String (niz), Date (datum) ali številske (več vrst).
Oba izraza morata imeti isti VarType ali pa morata biti oba številska.
Primerjava nizov razlikuje med velikimi in malimi črkami.
Vrne True, če je A manjši ali enak B.
svc.AssertLessEqual(a: any, b: any, message: str = ""): bool
Primerjava med A in B predvideva naslednje:
Ustrezne vrste podatkov so String (niz), Date (datum) ali številske (več vrst).
Oba izraza morata imeti isti VarType ali pa morata biti oba številska.
Primerjava nizov razlikuje med velikimi in malimi črkami.
Vrne True, če se niz A ujema z danim vzorcem, ki vsebuje nadomestne znake.
svc.AssertLike(a: any, pattern: str = "", message: str = ""): bool
Podprti so naslednji nadomestni znaki:
? – predstavlja poljuben posamičen znak.
* – predstavlja nič, enega ali več poljubnih znakov.
Vrne True, če sta A in B številski vrednosti in ne štejeta za bližnji pri dani relativni toleranci.
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:
A in B je mogoče pretvoriti v vrsto Double.
Absolutna razlika med A in B, deljena z največjo absolutno vrednostjo A ali B, je večja od vrednosti, določene z vrednostjo tolerance.
Vrne True, ko A in B ne veljata za enaka.
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.
Vrne True, če A (niz) ne najde v B.
svc.AssertNotIn(a: any, b: any, message: str = ""): bool
Preberite navodila za AssertIn, kjer najdete podrobnosti o predpostavkah te metode.
Vrne True, če A ni instanca navedene vrste predmeta.
svc.AssertNotInstance(a: any, objecttype: str, message: str = ""): bool
Preberite navodila za AssertIsInstance, kjer najdete podrobnosti o predpostavkah te metode.
Vrne True, če se niz A ne ujema z danim vzorcem, ki vsebuje nadomestne znake.
svc.AssertNotLike(a: any, pattern: str = "", message: str = ""): bool
Preberite navodila za AssertLike, kjer najdete podrobnosti o predpostavkah te metode.
Vrne True, razen če je A predmet, ki ima vrednost Nothing.
svc.AssertNotNothing(a: any, message: str = ""): bool
Vrne True, razen če ima A vrednost Null.
svc.AssertNotNull(a: any, message: str = ""): bool
Vrne True, če A ni niz oz. se ne ujema z danim regularnim izrazom.
svc.AssertNotRegex(a: any, regex: str = "", message: str = ""): bool
Primerjava razlikuje med velikimi in malimi črkami.
Vrne True, če se niz A ujema z danim regularnim izrazom.
svc.AssertRegex(a: any, regex: str = "", message: str = ""): bool
Primerjava razlikuje med velikimi in malimi črkami.
Vrne True, če je izraz A vrste Boolean in je njegova vrednost True.
svc.AssertTrue(a: any, message: str = ""): bool
Vsili, da testni primer spodleti.
svc.Fail(message: str = "")
Podano je lahko sporočilo, ki bo posredovano v konzolo.
Zapiše navedeni message v konzolo.
svc.Log(message: str = "")
Podano je lahko sporočilo, ki bo posredovano v konzolo.
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.
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.
Izvede celoten nabor testov, implementiran v danem modulu. Vsak testni primer se izvede neodvisno od drugega.
Izvajanje testa modula sestavlja:
Izvajanje neobvezne metode Setup, prisotne v modulu.
Enkratno izvajanje vsakega testnega primera, v poljubnem zaporedju.
Izvajanje neobvezne metode TearDown, prisotne v modulu.
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.
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.
svc.SkipTest(message: str = "")
Če je podan message, se zapiše v konzolo.