Tulong sa LibreOffice 25.8
Ang UnitTest nagbibigay ang serbisyo ng isang balangkas para sa pag-automate ng mga pagsubok sa unit gamit ang Basic na wika, kabilang ang kakayahang:
Pagsama-samahin ang mga test case sa mga test suite at unit test.
Ibahagi ang setup at shutdown code sa mga test case.
Iulat ang mga resulta ng pagsusulit gamit ang Console .
Ang mga unit test at ang code na susuriin ay dapat na nakasulat sa Basic. Ang code na sinusuri ay maaaring tumawag sa mga function na nakasulat sa ibang mga wika.
Ang UnitTest ang serbisyo ay hindi magagamit para sa mga script ng Python.
Ang kaso ng pagsubok ay ang indibidwal na yunit ng pagsubok. Sinusuri nito ang isang partikular na tugon sa isang partikular na hanay ng mga input.
Sa UnitTest serbisyo, ang isang test case ay kinakatawan ng isang Basic Sub na ang pangalan ay nagsisimula sa isang karaniwang prefix (ang default ay "Test_").
Nabigo ang test case kung isa sa AssertX bumabalik ang mga pamamaraan Mali .
Ang isang test suite ay isang koleksyon ng mga kaso ng pagsubok na dapat isagawa nang magkasama.
Ang lahat ng test case ng isang test suite ay naka-store sa isang Basic module.
Maaaring ipatupad ng isang test suite ang SetUp at TearDown mga paraan upang maghanda para sa mga kaso ng pagsubok sa modyul nito.
Ang buong unit test ay binubuo ng isang set ng mga test suite sa parehong Basic library.
Bago gamitin ang UnitTest serbisyo ang ScriptForge kailangang i-load o i-import ang library:
I-invoke ang serbisyo sa simpleng mode tumawag AssertX gumagana nang hindi kinakailangang bumuo ng buong hierarchy ng mga suite ng pagsubok at mga kaso ng pagsubok.
Sa simpleng mode, ang serbisyo ay ginagamit sa loob ng test case, tulad ng ipinapakita sa halimbawa sa ibaba:
    Sub SimpleTest
        On Local Error GoTo CatchError
        Dim myTest As Variant
        myTest = CreateScriptService("UnitTest")
        ' Ilang dummy na pagsubok
        myTest.AssertEqual(1 + 1, 2)
        myTest.AssertEqual(1 - 1, 0)
        MsgBox("Lahat ng pagsubok ay pumasa")
        Exit Sub
    CatchError:
        myTest.ReportError("Nabigo ang isang pagsubok")
    End Sub
  Sa halimbawang ito, kung alinman sa AssertEqual mabibigo ang mga tawag, pupunta ang interpreter sa CatchError lagyan ng label at iulat ang error sa pamamagitan ng pagtawag sa ReportError paraan.
Kapag pinapasok buong mode , ang paggawa ng serbisyo ay panlabas sa test code at lahat ng mga pagsubok ay nakaayos sa mga kaso ng pagsubok at mga suite ng pagsubok sa loob ng isang library.
Ang sumusunod na halimbawa ay lumilikha ng a UnitTest halimbawa kung saan ang mga pagsubok ay matatagpuan sa loob ng kasalukuyang dokumento ( ThisComponent ) sa library ng "Mga Pagsubok."
    GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
    Dim myUnitTest As Variant
    myUnitTest = CreateScriptService("UnitTest", ThisComponent, "Tests")
  Isaalang-alang na ang isang ODS file ay may isang module na pinangalanang "MathUtils" sa "Standard" na library nito na may sumusunod na code:
    ' Code sa module na Standard.MathUtils
    Function Sum(a, b) As Double
        Sum = a + b
    End Function
    
    Function Multiply(a, b) As Double
        Multiply = a * b
    End Function
  Upang lumikha ng isang buong test suite, isaalang-alang na ang isang bagong library na pinangalanang "Mga Pagsubok" ay nilikha sa file na may isang module na "AllTests" na naglalaman ng code sa ibaba:
    ' Code sa module 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)
        ' Ang code ng paghahanda ay tumakbo bago ang unang kaso ng pagsubok
        Dim exc As Variant
        exc = CreateScriptService("Exception")
        exc.Console(Modal := False)
    End Sub
    
    Sub TearDown(test)
        ' Opsyonal na cleanup code na tinawag pagkatapos ng huling test case
    End Sub
    
    Sub Test_Sum(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Sum(1, 1), 2, "Sum two positive integers")
        test.AssertEqual(Sum(-10, 20), 10, "Sum of negative and positive integers")
        test.AssertEqual(Sum(1.5, 1), 2.5, "Sum of float and integer values")
        Exit Sub
    CatchError:
        test.ReportError("Nasira ang paraan ng kabuuan")
    End Sub
    
    Sub Test_Multiply(test)
        On Local Error GoTo CatchError
        test.AssertEqual(Multiply(2, 2), 4, "Multiply two positive integers")
        test.AssertEqual(Multiply(-4, 2), -8, "Multiply negative and positive integers")
        test.AssertEqual(Multiply(1.5, 3), 4.5, "Multiply of float and integer values")
        Exit Sub
    CatchError:
        test.ReportError("Nasira ang paraan ng multiply")
    End Sub
  Ang test suite sa itaas ay binubuo ng dalawang test case Test_Sum at Test_Multiply . Upang patakbuhin ang lahat ng mga pagsubok, patakbuhin lang ang Pangunahing pamamaraan mula sa module na "AllTests".
Ang Console mula sa Exception ginagamit ang serbisyo bilang default na output upang mag-print ng mga resulta ng pagsubok. Pagkatapos patakbuhin ang halimbawa sa itaas, ang sumusunod na output ay ipapakita sa console:
    ' 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)
  Kung alinman sa mga AssertEqual nabigo ang mga pamamaraan sa panahon ng mga pagsubok na ito, isang mensahe ng error ang idinagdag sa console.
| Pangalan | Readonly | Type | Mga nilalaman | 
|---|---|---|---|
| LongMessage | Hindi | Boolean | Kapag nakatakda sa totoo (default) ipinapakita ng console ang karaniwang mensahe na nakadugtong sa mensaheng ibinigay ng tester. kailan Mali , tanging ang mensaheng tinukoy ng tester ang ginagamit. | 
| ReturnCode | Mayroon | Integer | Ibinalik ang halaga ni RunTest pagkatapos ng unit test. Susunod ay isang listahan ng mga posibleng halaga: 0 - Natapos ang pagsubok nang walang mga error o hindi nagsimula ang pagsubok | 
| Verbose | Hindi | Boolean | Kapag nakatakda sa totoo , ang lahat ng mga assertion ay iniulat sa console (bigo o hindi). kailan Mali (default), ang mga bagsak na assertion lamang ang iniuulat. | 
| WhenAssertionFails | Hindi | Integer | Tinutukoy kung ano ang ginagawa kapag nabigo ang isang paninindigan. Susunod ay isang listahan ng mga posibleng halaga: 0 - Huwag pansinin ang kabiguan at magpatuloy sa pagpapatakbo ng pagsubok | 
Sinusubukan ng lahat ng assertion ang isa o dalawang expression, na tinutukoy sa natitira sa pahina ng tulong na ito bilang A at B . Palagi silang ang una o dalawang argumento sa AssertX paraan.
Lahat AssertX tinatanggap ng mga pamamaraan a mensahe argumento na tumutukoy sa isang custom na mensahe na iuulat sa console tungkol sa assertion. Bilang default, ginagamit ang isang walang laman na string. Ang argumentong ito ay palaging nasa huling posisyon ng assertion.
Ang ilan AssertX ang mga pamamaraan ay tumatanggap din ng mga karagdagang argumento, gaya ng inilarawan ng kanilang mga syntax sa ibaba.
Nagbabalik totoo kailan A at B ay mga numerical value at itinuturing na malapit sa isa't isa, na binigyan ng kamag-anak na pagpapaubaya.
svc.AssertAlmostEqual(a: any, b: any, tolerance: double = 1E-09, message: str = ""): bool
Nagbabalik ang paninindigan na ito totoo kung ang dalawang kundisyon sa ibaba ay natutugunan:
Ang A at B ay maaaring i-convert sa Doble uri.
Ang ganap na pagkakaiba sa pagitan ng A at B na hinati sa pinakamalaking ganap na halaga ng A o B ay mas mababa kaysa sa halagang tinukoy sa pagpaparaya .
Nagbabalik totoo kailan A at B ay itinuturing na pantay-pantay.
svc.AssertEqual(a: any, b: any, message: str = ""): bool
Kapag ang A at B ay mga scalar, totoo ay ibinabalik kung:
Ang parehong mga expression ay may pareho VarType o parehong numero.
Ang mga boolean at numeric na halaga ay inihambing sa = operator.
Ang mga string ay inihambing sa builtin StrComp function. Case-sensitive ang paghahambing.
Ang mga petsa at oras ay inihahambing hanggang sa pangalawa.
Null , Walang laman at wala ay hindi pantay, ngunit AssertEqual(Wala, Wala) nagbabalik totoo .
Ang mga bagay ng UNO ay inihambing sa builtin EqualUnoObjects paraan.
Tandaan na ang mga pangunahing bagay ay hindi kailanman pantay.
Kapag ang A at B ay mga arrays, totoo ay ibinabalik kung:
Ang parehong mga array ay may parehong bilang ng mga dimensyon (hanggang sa 2 dimensyon) at ang kanilang mas mababa at itaas na mga hangganan ay magkapareho para sa lahat ng mga dimensyon.
Ang lahat ng mga item sa parehong mga array ay pantay, isa-isa.
Dalawang walang laman na array ang itinuturing na pantay.
Nagbabalik totoo kapag ang uri ng A ay Boolean at ang halaga nito ay Mali .
svc.AssertFalse(a: any, message: str = ""): bool
Nagbabalik totoo kapag ang A ay mas malaki kaysa sa B.
svc.AssertGreater(a: any, b: any, message: str = ""): bool
Ang paghahambing sa pagitan ng A at B ay ipinapalagay ang sumusunod:
Ang mga karapat-dapat na uri ng data ay String , Petsa o numeric.
Ang parehong mga expression ay dapat na pareho VarType o pareho ay dapat na numero.
Ang mga paghahambing ng string ay case-sensitive.
Nagbabalik totoo kapag ang A ay mas malaki sa o katumbas ng B.
svc.AssertGreaterEqual(a: any, b: any, message: str = ""): bool
Ang paghahambing sa pagitan ng A at B ay ipinapalagay ang sumusunod:
Ang mga karapat-dapat na uri ng data ay String , Petsa o numeric.
Ang parehong mga expression ay dapat na pareho VarType o pareho ay dapat na numero.
Ang mga paghahambing ng string ay case-sensitive.
Nagbabalik totoo kapag ang A ay matatagpuan sa B.
svc.AssertIn(a: any, b: any, message: str = ""): bool
Ipinapalagay ng pahayag na ito ang sumusunod:
Ang Expression B ay maaaring isang 1D array, isang ScriptForge Diksyunaryo bagay o isang string.
Kapag ang expression B ay isang 1D array, ang expression A ay maaaring isang petsa o isang numeric na halaga.
Kapag ang expression B ay isang ScriptForge Diksyunaryo object, pagkatapos ay hahanapin ang string A sa mga key sa B.
Ang mga paghahambing ng string ay case-sensitive.
Nagbabalik totoo kapag ang A ay isang instance ng isang tinukoy na uri ng bagay, na tinukoy bilang isang string na naglalaman ng pangalan ng uri.
svc.AssertIsInstance(a: any, objecttype: str, message: str = ""): bool
Ang Expression A ay maaaring isa sa mga sumusunod:
Isang object ng ScriptForge. Sa kasong ito, ang objecttype argument ay isang string tulad ng "DICTIONARY", "calc", "Dialog", atbp.
Isang bagay ng UNO. Sa kasong ito, ang objecttype argument ay dapat na isang string na kapareho ng halaga na ibinalik ng SF_Session.UnoObjectType() paraan.
Isang Array. Sa kasong ito, ang objecttype ang argumento ay inaasahang magiging "array".
Anumang iba pang variable (ni an Bagay ni isang Array ). Sa kasong ito, objecttype ay isang string na tumutugma sa halaga na ibinalik ng builtin TypeName function.
Nagbabalik totoo kapag ang A ay isang bagay na mayroong wala halaga.
svc.AssertIsNothing(a: any, message: str = ""): bool
Nagbabalik totoo kapag si A ay may Null halaga.
svc.AssertIsNull(a: any, message: str = ""): bool
Nagbabalik totoo kapag ang A ay mas mababa sa B.
svc.AssertLess(a: any, b: any, message: str = ""): bool
Ang paghahambing sa pagitan ng A at B ay ipinapalagay ang sumusunod:
Ang mga karapat-dapat na uri ng data ay String , Petsa o numeric.
Ang parehong mga expression ay dapat na pareho VarType o pareho ay dapat na numero.
Ang mga paghahambing ng string ay case-sensitive.
Nagbabalik totoo kapag ang A ay mas mababa sa o katumbas ng B.
svc.AssertLessEqual(a: any, b: any, message: str = ""): bool
Ang paghahambing sa pagitan ng A at B ay ipinapalagay ang sumusunod:
Ang mga karapat-dapat na uri ng data ay String , Petsa o numeric.
Ang parehong mga expression ay dapat na pareho VarType o pareho ay dapat na numero.
Ang mga paghahambing ng string ay case-sensitive.
Nagbabalik totoo kung tumutugma ang string A sa isang partikular na pattern na naglalaman ng mga wildcard.
svc.AssertLike(a: any, pattern: str = "", message: str = ""): bool
Ang mga sumusunod na wildcard ay tinatanggap:
? - Kumakatawan sa anumang solong karakter.
* - Kumakatawan sa zero, isa, o maraming character.
Nagbabalik totoo kailan A at B ay mga numerical na halaga at ay hindi itinuturing na malapit sa isa't isa, binigyan ng kamag-anak na pagpaparaya.
svc.AssertNotAlmostEqual(a: any, b: any, tolerance: double = 1E-09, message: str = ""): bool
Nagbabalik ang paninindigan na ito totoo kung ang dalawang kundisyon sa ibaba ay natutugunan:
Ang A at B ay maaaring i-convert sa Doble uri.
Ang ganap na pagkakaiba sa pagitan ng A at B na hinati sa pinakamalaking ganap na halaga ng A o B ay mas malaki kaysa sa halagang tinukoy sa pagpaparaya .
Nagbabalik totoo kailan A at B ay hindi itinuturing na pantay.
svc.AssertNotEqual(a: any, b: any, message: str = ""): bool
Gumagana ang pamamaraang ito kapwa para sa mga scalar at array. Basahin ang mga tagubilin sa AssertEqual para sa karagdagang impormasyon sa kung ano ang ibig sabihin ng pagkakapantay-pantay sa assertion na ito.
Nagbabalik totoo kapag ang A (isang string) ay hindi matatagpuan sa B.
svc.AssertNotIn(a: any, b: any, message: str = ""): bool
Basahin ang mga tagubilin sa AssertIn para sa karagdagang impormasyon sa mga pagpapalagay ng pamamaraang ito.
Nagbabalik totoo kapag si A hindi isang halimbawa ng isang tinukoy na uri ng bagay.
svc.AssertNotInstance(a: any, objecttype: str, message: str = ""): bool
Basahin ang mga tagubilin sa AssertIsInstance para sa karagdagang impormasyon sa mga pagpapalagay ng pamamaraang ito.
Nagbabalik totoo kung string A hindi tumugma sa ibinigay na pattern na naglalaman ng mga wildcard.
svc.AssertNotLike(a: any, pattern: str = "", message: str = ""): bool
Basahin ang mga tagubilin sa AssertLike para sa karagdagang impormasyon sa mga pagpapalagay ng pamamaraang ito.
Nagbabalik totoo maliban kung ang A ay isang bagay na mayroong wala halaga.
svc.AssertNotNothing(a: any, message: str = ""): bool
Nagbabalik totoo maliban kung si A ay may Null halaga.
svc.AssertNotNull(a: any, message: str = ""): bool
Nagbabalik totoo kapag si A hindi isang string o hindi tumugma sa ibinigay na regular na expression.
svc.AssertNotRegex(a: any, regex: str = "", message: str = ""): bool
Case-sensitive ang paghahambing.
Nagbabalik totoo kapag tumugma ang string A sa ibinigay na regular na expression.
svc.AssertRegex(a: any, regex: str = "", message: str = ""): bool
Case-sensitive ang paghahambing.
Nagbabalik totoo kapag ang expression A ay a Boolean at ang halaga nito ay totoo .
svc.AssertTrue(a: any, message: str = ""): bool
Pinipilit na mabigo ang isang test case.
svc.Fail(message: str = "")
Maaaring magbigay ng mensahe upang maiulat sa console.
Isinulat ang tinukoy mensahe sa console.
svc.Log(message: str = "")
Maaaring magbigay ng mensahe upang maiulat sa console.
Nagpapakita ng message box na may mensahe at ang kasalukuyang mga value ng property ng Exception serbisyo.
Ang paraang ito ay karaniwang ginagamit sa exception handling section ng Sub na naglalaman ng test case, na naaabot kapag nabigo ang isang assertion o kapag ang Nabigo tinatawag na pamamaraan.
svc.ReportError(message: str = "")
Depende sa halaga ng ari-arian WhenAssertionFails , ang pagsasagawa ng pagsubok ay maaaring magpatuloy o maantala.
Kapag nagsusulat ng mga test case, inirerekomenda na isama ang isang tawag sa ReportError paraan sa exception handling section ng Sub .
Kung ang ari-arian LongMessage ay katumbas ng totoo , ang tinukoy mensahe ay sinusundan ng karaniwang paglalarawan ng mensahe ng error. Kung hindi lamang ang mensahe ay ipinapakita.
Isinasagawa ang kumpletong test suite na ipinatupad sa tinukoy na module. Ang bawat test case ay tumatakbo nang hiwalay sa isa't isa.
Ang pagpapatakbo ng isang test suite ay binubuo ng:
Isinasagawa ang opsyonal Setup pamamaraan na nasa modyul.
Isinasagawa nang isang beses ang bawat test case, sa walang partikular na pagkakasunud-sunod.
Isinasagawa ang opsyonal TearDown paraan na nasa modyul.
svc.RunTest(testsuite: str, testcasepattern: str = "", message: str = ""): int
Ang argumento testcasepattern tumutukoy sa isang pattern na binubuo ng "?" at "*" mga wildcard upang piliin kung aling mga test case ang tatakbo. Ang paghahambing ay hindi case-sensitive.
Kung a mensahe ay ibinigay, ito ay nakasulat sa console kapag nagsimula ang pagsubok.
Naantala ang tumatakbong test suite nang hindi tumatawag sa TearDown paraan.
Ang paglaktaw sa pagsusulit ay karaniwang makabuluhan sa panahon ng Pag-setup paraan kapag hindi lahat ng kundisyon para patakbuhin ang pagsubok ay natutugunan.
Ito ay hanggang sa Setup paraan upang lumabas sa Sub ilang sandali matapos ang SkipTest tawag.
Kung SkipTest ay tinawag mula sa loob ng isang test case, ang pagpapatupad ng test suite ay naaantala at ang natitirang mga test case ay hindi pinapatakbo. Tandaan na ang pagkakasunud-sunod ng pagpapatakbo ng mga kaso ng pagsubok ay arbitrary sa loob ng isang suite ng pagsubok.
svc.SkipTest(message: str = "")
Kung a mensahe ay ibinigay, ito ay nakasulat sa console.