Edukiak

# SFUnitTests.UnitTest zerbitzua

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

- proba-kasuak proba-suitetan eta unitate-probetan bildu.

- Unitate-proben artean konfiguraziorako eta itzaltzerako kodea partekatu.

- Proben emaitzak jakinarazi Console bidez.

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

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:

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

- A zein B Double motara bihurtu daitezke.

- A eta B balioen arteko diferentzia absolutua zati Aren edo Bren balio absolutu handiena tolerance argumentuan zehaztutako balioa baino txikiagoa da.

## 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:

- Bi adierazpenek VarType bera badute edo biak zenbakizkoak badira.

- Zenbakizko balioak eta balio boolearrak = eragilearekin konparatzen badira.

- Kateak StrComp funtzio integratuarekin konparatzen badira. Maiuskulak eta minuskulak kontuan hartzen dira konparazioan.

- Datak eta orduak segundora arte konparatzen badira.

- Null, Empty eta Nothing ez badira berdinak, bainaAssertEqual(Nothing, Nothing) funtzioak True (egia) itzultzen badu.

- UNO objektuak EqualUnoObjects metodo integratuaren bidez konparatzen badira.

- Kontuan izan Basic objektuak ez direla inoiz berdinak.

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

- Bi matrizeek dimentsio kopuru bera badute (2 dimentsiora arte) eta haien goiko eta beheko mugak berdinak badira dimentsio guztietarako.

- Bi matrizeetako elementu guztiak berdinak badira, banan-banan.

- Hutsik dauden bi matrize berdinak direla kontsideratzen bada.

## 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:

- Erabili daitezkeen datu motak String, Date edo zenbakiak dira.

- Bi adierazpenek VarType bera izan behar dute edo biek zenbakizkoak izan behar dute.

- Kateen arteko konparazioetan maiuskulak/minuskulak kontuan hartzen dira.

## 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:

- Erabili daitezkeen datu motak String, Date eta zenbakiak dira.

- Bi adierazpenek VarType bera izan behar dute edo biek zenbakizkoak izan behar dute.

- Kateen arteko konparazioetan maiuskulak/minuskulak kontuan hartzen dira.

## 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:

- B adierazpena izan daiteke 1D matrize bat, ScriptForge Dictionary objektu bat edo kate bat.

- B adierazpena 1D matrize bat bada, A adierazpena data bat edo zenbakizko balio bat izan daiteke.

- B adierazpena ScriptForge Dictionary objektua bada, A katea arakatzen da Bko kateen bila.

- Kateen konparazioetan maiuskulak/minuskulak kontuan hartzen dira.

## 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:

- ScriptForge objektua. Kasu horretan, objecttype argumentua kate bat da, adibidez "DICTIONARY", "calc", "Dialog", etab.

- UNO objektua. Kasu horretan, objecttype argumentuak SF_Session.UnoObjectType() metodoak itzultzen dituen balioen berdina den kate bat izan behar du.

- Matrize bat. Kasu horretan, objecttype argumentuak "array" izan behar du.

- Beste edozein aldagai (Object zein Array ). Kasu horretan, objecttype zera da, integratutako TypeName funtzioak itzultzen duen balioarekin bat datorren kate bat.

## 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:

- String, Date edo zenbakiak erabili daitezke.

- Bi adierazpenek VarType mota bera izan behar dute edo biek zenbakizkoak izan behar dute.

- Kateen arteko konparazioek maiuskulak eta minuskulak kontuan hartzen dituzte.

## 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:

- String, Date edo zenbakiak erabili daitezke.

- Bi adierazpenek VarType bera izan behar dute edo zenbakizkoak izan behar dute.

- Kate-konparazioetan maiuskulak/minuskulak kontuan hartzen dira.

## 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:

- ? - Karaktere bakarra.

- * - Zero, bat edo anitz karaktere.

## 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:

- A eta B Double motara bihurtu daitezke.

- A eta B balioen arteko diferentzia absolutua zati Aren edo Bren balio absolutu handiena tolerance argumentuan zehaztutako balioa baino handiagoa da.

## 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.

Erlazionatutako gaiak

ScriptForge.Exception zerbitzua