SFUnitTests.UnitTest zerbitzua

UnitTest zerbitzuak unitate-probak automatizatzeko lan-markoa eskaintzen du Basic lengoaiarako. Besteak beste, honakoak egin ditzake:

note

Bai unitate-proba bai probatuko den kodea Basic lengoaian idatzi behar dira. Probatuko den kodeak beste lengoaia batzuetan idatzitako funtzioei dei diezaieke.


warning

UnitTest zerbitzua ezin da erabili Python scriptekin.


Definizioak

Proba-kasua

Proba-kasu bat probetarako banakako unitatea da. Sarrera multzo jakin baten erantzun espezifikoa egiaztatzen du.

UnitTest zerbitzuan, proba-kasu bat Basic-en Sub bakar baten bidez adierazten da. Bere izena aurrizki arrunt batekin hasi ohi da (lehenetsia "Test_" da).

Proba-kasuak huts egiten du AssertX metodoetako batek False itzultzen badu.

Proba-suitea

Proba-suite bat elkarrekin exekutatu daitezkeen proba-kasuen bilduma bat da.

Proba-suite bateko kasu guztiak Basic modulu bakar batean biltegiratzen dira.

Proba-suite batek SetUp egta TearDown metodoak inplementatu ditzake bere moduluko proba-kasuetarako prestatzeko.

Unitate-proba

Unitate-proba bat Basic liburutegi bereko proba-suiten multzo bat da.

Zerbitzuari deitzea

UnitTest zerbitzua erabiltzeko, ScriptForge liburutegia kargatu edo inportatu behar da:

note

• Basic makroak erabiltzkeo, ScriptForge liburutegia kargatu behar da honako instrukzioa erabiliz:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Python scriptak erabiltzeko, berriz, scriptforge modulu baten inportazioa behar dute:
from scriptforge import CreateScriptService


Modu sinplea

Deitu zerbitzuari modu sinplean AssertX funtzioei proba-suiten eta proba-kasuen hierarkia osoa eraiki behar izan gabe deitu ahal izateko.

Modu sinplean, zerbitzuari testu-probaren barruan deitzen zaio, beheko adibidean erakusten den moduan:


    Sub SimpleTest
        On Local Error GoTo CatchError
        Dim myTest As Variant
        myTest = CreateScriptService("UnitTest")
        ' Simulatutako proba batzuk
        myTest.AssertEqual(1 + 1, 2)
        myTest.AssertEqual(1 - 1, 0)
        MsgBox("Proba guztiak gainditu dira")
        Exit Sub
    CatchError:
        myTest.ReportError("Proba batek huts egin du")
    End Sub
  

Honako adibidean, AssertEqual deietako edozeinek huts egiten badu, interpretatzailea CatchError etiketara joango da eta errorearen berri emango du ReportError metodoari deituta.

Modu osoa

Modu osoan deitua izatean, zerbitzuaren sorrera proba-kodetik kanpo gertatzen da eta proba guztiak proba-kasuetan eta proba-suitetan antolatzen dira liburutegi bakar batean.

Hurrengo adibidean, probak uneko dokumentuko (ThisComponent) "Tests" liburutegian dituen UnitTest instantzia bat sortzen da.


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

Modu osoko adibide minimalista bat

Kontuan izan ODS fitxategi batek "MathUtils" izeneko modulua duela "Standard" liburutegian, eta modulu horrek honako kodea duela:


    ' Standard.MathUtils moduluko kodea
    Function Sum(a, b) As Double
        Sum = a + b
    End Function
    
    Function Multiply(a, b) As Double
        Multiply = a * b
    End Function
  

Proba-suite oso bat sortzeko, kontuan hartu "AllTests" izeneko modulu bakar bat duen "Tests" liburutegi berria sortzen dela fitxategian, eta honako kodea duela:


    ' Tests.AllTests moduluko kodea
    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)
        ' Lehen proba-kasuaren aurretik exekutatzen den prestakuntza-kodea
        Dim exc As Variant
        exc = CreateScriptService("Exception")
        exc.Console(Modal := False)
    End Sub
    
    Sub TearDown(test)
        ' Azken proba-kasuaren ondoren deitutako garbiketa-kodea, aukerakoa
    End Sub
    
    Sub Test_Sum(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Sum(1, 1), 2, "Bi osoko balio positiboren batuketa")
        test.AssertEqual(Sum(-10, 20), 10, "Osoko balio negatibo eta positiboen batuketa")
        test.AssertEqual(Sum(1.5, 1), 2.5, "Koma mugikorreko balioen eta osoko balioen batuketa")
        Exit Sub
    CatchError:
        test.ReportError("Batuketa egiteko metodoa hondatuta dago")
    End Sub
    
    Sub Test_Multiply(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Multiply(2, 2), 4, "Biderkatu osoko bi balio positibo")
        test.AssertEqual(Multiply(-4, 2), -8, "Biderkatu osoko balio negatiboak eta positiboak")
        test.AssertEqual(Multiply(1.5, 3), 4.5, "Koma mugikorreko balioen eta osoko balioen biderketa")
        Exit Sub
    CatchError:
        test.ReportError("Biderketa egiteko metodoa hondatuta dago")
    End Sub
  

Goiko proba-suiteak bi proba-kasu ditu, Test_Sum eta Test_Multiply. Proba guztiak exekutatzeko, exekutatu "AllTests" moduluko Main metodoa.

Exception zerbitzuaren Console erabiltzen da probaren emaitzaren erakusteko irteera lehenetsi gisa. Goiko adibidea exekutatu ondoren, honako irteera erakutsiko da kontsolan:


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

AssertEqual metodoetako batek huts egiten badu probetan zehar, errore-mezu bat gehituko zaio kontsolari.

Propietateak

Izena

Irakurtzeko soilik

Mota

Deskribapena

LongMessage

Ez

Boolean

True (balio lehenetsia) ezarrita badago, kontsolak mezu estandarra erakutsiko du probatzaileak emandako mezuari erantsita. False bada, probatzaileak definitutako mezua soilik erabiliko da.

ReturnCode

Bai

Integer

RunTest funtzioak itzultzen duen balioa unitate-proba amaitzen denean. Balio posibleen zerrenda:

0 - Proba errorerik gabe amaitu da edo ez da hasi
1 - Proba bateko baieztapenetako batek False itzuli du
2 - SkipTest bat jaulki du Setup metodoak edo proba-kasuetako batek.
3 - Proba ez da modu normalean amaitu

Verbose

Ez

Boolean

True ezarrita badago, baieztapen guztiak (huts egiten dutenak eta ez dutenak) kontsolan jakinaraziko dira. False (lehenetsia) badago, huts egiten duten baieztapenak soilik jakinaraziko dira.

WhenAssertionFails

Ez

Integer

Baieztapen batek huts egiten duenean zer egingo den definitzen du. Balio posibleen zerrenda:

0 - Ez ikusiarena egin hutsegiteari eta jarraitu proba exekutatzen
1 - Moduluko TearDown metodoa uneko proba-suitean exekutatzen da eta hurrengo suitea abiarazten da (lehenetsia modu osoan).
2 - Gelditu berehala (lehenetsia modu sinplean)


UnitTest zerbitzuaren metodoen zerrenda

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


AssertX metodoen argumentuak

Baieztapen guztiek adierazpen bat edo bi probatzen dituzte. Laguntza-orri honetan A eta B izenak eman zaizkie adierazpen horiei. Beti dira AssertX metodoaren bi argumentuetako lehena edo bigarrena.

AssertX metodo guztiek onartzen dute message argumentu bat, baieztapenari buruzko mezu pertsonalizatu bat jakinarazteko kontsolan. Kate hutsa da balio lehenetsia. Argumentu hau beti dago baieztapenaren azken kokagunean.

Zenbait AssertX metodok argumentu gehigarriak ere onartzen dituzte, behean azaltzen diren sintaxien arabera.

AssertAlmostEqual

True (egia) itzultzen du A eta B zenbakizko balioak direnean eta elkarrekiko hurbil daudela kontsideratzen denean, emandako tolerantzia baten arabera.

Sintaxia:

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

True itzultzen du beheko bi baldintzak betetzen badira:

AssertEqual

True itzultzen du A eta B berdinak direla kontsideratzen denean.

Sintaxia:

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

A eta B eskalarrak badira, True itzuliko da baldin eta:

A eta B matrizeak direnean, True itzuliko da baldin eta:

AssertFalse

True itzultzen du A elementuaren mota Boolean denean eta bere balioa False denean.

Sintaxia:

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

AssertGreater

True itzultzen du A B baino handiagoa denean.

Sintaxia:

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

A eta B arteko konparazioak honakoa onartzen du:

AssertGreaterEqual

True (egia) itzultzen du A balioa B balioa baino handiagoa edo berdina bada.

Sintaxia:

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

A eta B arteko konparazioak honakoa onartzen du:

AssertIn

True itzultzen du A balioa B balioan aurkitzen bada.

Sintaxia:

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

Baieztapen horrek honakoa onartzen du:

AssertIsInstance

True itzultzen du A zehaztutako objektu motaren instantzia bat denean. Objektua motaren izena duen kate gisa zehaztu behar da.

Sintaxia:

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

A adierazpena honakoetako bat izan daiteke:

AssertIsNothing

True itzultzen du A Nothing balioa duen objektu bat bada.

Sintaxia:

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

AssertIsNull

True itzultzen du Ak Null balioa duenean.

Sintaxia:

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

AssertLess

True itzultzen du A B baino txikiagoa denean.

Sintaxia:

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

A eta B arteko konparazioak honakoa onartzen du:

AssertLessEqual

True (egia) itzultzen du A balioa B balioa baino txikiagoa edo berdina denean.

Sintaxia:

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

A eta B arteko konparazioak honakoa onartzen du:

AssertLike

True (egia) itzultzen du A balioa komodinak dituen eredu jakin batekin bat badator.

Sintaxia:

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

Honako komodinak onartzen dira:

AssertNotAlmostEqual

True (egia) itzultzen du A eta B zenbakizko balioak badira eta ez bada kontsideratzen elkarrengandik hurbil daudela, emandako tolerantzia erlatibo bati kasu eginez.

Sintaxia:

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

Baieztapenak True (egia) itzultzen du beheko bi baldintzak betetzen badira:

AssertNotEqual

True (egia) itzultzen du A eta B berdintzat hartzen ez badira.

Sintaxia:

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

Metodo honek eskalarrekin zein matrizeekin funtzionatzen du. Irakurri AssertEqual baieztapen honetan berdintasunak zer esan nahi duen jakitzeko.

AssertNotIn

True itzultzen du A (kate bat) aurkitzen ez bada B adierazpenean.

Sintaxia:

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

Irakurri AssertIn metodo honi buruzko informazio gehiago jasotzeko.

AssertNotInstance

True (egia) itzultzen du A zehaztutako objektu motaren instantzia bat ez bada.

Sintaxia:

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

Irakurri AssertIsInstance metodo honi buruzko informazio gehiago jasotzeko.

AssertNotLike

True (egia) itzultzen du A komodinak dituen emandako eredu batekin bat ez badator.

Sintaxia:

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

Irakurri AssertLike metodo honi buruzko informazio gehiago jasotzeko.

AssertNotNothing

True (egia) itzultzen du A Nothing balioa duen objektu bat bada salbu.

Sintaxia:

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

AssertNotNull

True (egia) itzultzen du A adierazpenak Null balioa badu salbu.

Sintaxia:

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

AssertNotRegex

True (egia) itzultzen du A kate bat ez bada edo emandako adierazpen erregularrarekin bat egiten ez badu.

Sintaxia:

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

Konparazioan maiuskulak/minuskulak kontuan hartzen dira.

AssertRegex

True itzultzen du A katea emandako adierazpen erregularrarekin bat datorrenean.

Sintaxia:

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

Konparazioan maiuskulak/minuskulak kontuan hartzen dira.

AssertTrue

True (egia) itzultzen du A adierazpena Boolean bat bada eta bere balioa True bada.

Sintaxia:

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

Fail

Proba-kasu batek huts egin dezan behartzen du.

Sintaxia:

svc.Fail(message: str = "")

Mezu bat eman daiteke kontsolan agertu dadin.

Log

Zehaztutako message mezua kontsolan idazten du.

Sintaxia:

svc.Log(message: str = "")

Mezu bat eman daiteke kontsolan agertu dadin.

ReportError

Exception zerbitzuaren uneko propietate-balioa eta mezu bat dituen koadro bat erakusten du.

Metodo hau normalean proba-kasua duen Sub prozeduran erabiltzen da, salbuespenak maneiatzeko sekzioan. Baieztapenak huts egiten duenean edo Fail metodoari deitzen zaionean aktibatzen da.

Sintaxia:

svc.ReportError(message: str = "")

WhenAssertionFails propietatearen balioaren arabera, probaren exekuzioak aurrera jarraitu dezake edo eten egin daiteke.

Proba-kasuak idazten direnean, gomendagarria da ReportError metodoari deitzea Sub prozedurak salbuespenak maneiatzeko duen sekzioan.

LongMessage propietatea True bada, zehaztutako message mezuaren ondoren mezuaren deskribapen estandarra erakutsiko da. Bestela, message mezua soilik bistaratuko da.

RunTest

Zehaztutako moduluan inplementatutako proba-suite osoa exekutatzen du. Proba-kasuak bakoitza bere aldetik exekutatzen dira.

Proba-suite bat exekutatzeko:

  1. Moduluko Setup metodoa exekutatzen da.

  2. Proba-kasu bakoitza behin exekutatzen da, ordenarik gabe.

  3. Moduluko aukerako TearDown metodoa exekutatzen da.

Sintaxia:

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

testcasepattern argumentuak "?" eta "*" komodinez osatutako eredu bat zehazten du, zein proba-kasu exekutatuko diren hautatzeko. Konparazioan ez dira maiuskulak/minuskulak bereizten.

message parametroa ematen bada, kontsolan idatziko da proba hasten denean.

SkipTest

Exekutatzen ari den proba-suitea eteten du TearDown metodoari deitu gabe.

Setup metodoan zehar probak saltatzea logikoa izan daiteke proba exekutatzeko baldintza guztiak ez direnean betetzen.

Setup metodoak berak erabakiko du Sub prozeduratik irtetea SkipTest deitu eta berehala.

SkipTest proba-kasu baten barrutik deitzen bada, proba-suitearen exekuzioa eten egingo da eta gainerako proba-kasuak ez dira exekutatu. Kontuan izan proba-suitearen barruko proba-kasuak exekutatzen diren ordena ausazkoa dela.

Sintaxia:

svc.SkipTest(message: str = "")

message mezu bat ematen bada, kontsolan idatziko da.

Emaguzu laguntza!