SFUnitTests . UnitTest serbisyo

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:

note

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.


warning

Ang UnitTest ang serbisyo ay hindi magagamit para sa mga script ng Python.


Mga Kahulugan

Test Case

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 .

Test Suite

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.

Unit Test

Ang buong unit test ay binubuo ng isang set ng mga test suite sa parehong Basic library.

Panawagan sa serbisyo

Bago gamitin ang UnitTest serbisyo ang ScriptForge kailangang i-load o i-import ang library:

note

• Ang mga pangunahing macro ay kailangang mag-load ScriptForge aklatan gamit ang sumusunod na pahayag:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Ang mga script ng Python ay nangangailangan ng pag-import mula sa scriptforge module:
mula sa scriptforge import CreateScriptService


Simpleng mode

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.

Buong mode

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

Isang minimalist na halimbawa sa full mode

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.

Mga Katangian

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
1 - Isang assertion sa loob ng isang test case ang ibinalik Mali
2 - A SkipTest ay inilabas ng Setup paraan o sa pamamagitan ng isa sa mga kaso ng pagsubok.
3 - Abnormal na pagtatapos ng 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
1 - Ang TearDown Ang pamamaraan sa module ay isinasagawa sa kasalukuyang test suite at ang susunod na suite ay sinimulan (default sa full mode).
2 - Huminto kaagad (default sa simpleng mode)


Listahan ng Mga Paraan sa Serbisyo ng 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


Mga argumento ng mga pamamaraan ng AssertX

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.

AssertAlmostEqual

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.

Syntax:

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:

AssertEqual

Nagbabalik totoo kailan A at B ay itinuturing na pantay-pantay.

Syntax:

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

Kapag ang A at B ay mga scalar, totoo ay ibinabalik kung:

Kapag ang A at B ay mga arrays, totoo ay ibinabalik kung:

AssertFalse

Nagbabalik totoo kapag ang uri ng A ay Boolean at ang halaga nito ay Mali .

Syntax:

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

AssertGreater

Nagbabalik totoo kapag ang A ay mas malaki kaysa sa B.

Syntax:

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

Ang paghahambing sa pagitan ng A at B ay ipinapalagay ang sumusunod:

AssertGreaterEqual

Nagbabalik totoo kapag ang A ay mas malaki sa o katumbas ng B.

Syntax:

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

Ang paghahambing sa pagitan ng A at B ay ipinapalagay ang sumusunod:

AssertIn

Nagbabalik totoo kapag ang A ay matatagpuan sa B.

Syntax:

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

Ipinapalagay ng pahayag na ito ang sumusunod:

AssertIsInstance

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.

Syntax:

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

Ang Expression A ay maaaring isa sa mga sumusunod:

AssertIsNothing

Nagbabalik totoo kapag ang A ay isang bagay na mayroong wala halaga.

Syntax:

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

AssertIsNull

Nagbabalik totoo kapag si A ay may Null halaga.

Syntax:

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

AssertLess

Nagbabalik totoo kapag ang A ay mas mababa sa B.

Syntax:

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

Ang paghahambing sa pagitan ng A at B ay ipinapalagay ang sumusunod:

AssertLessEqual

Nagbabalik totoo kapag ang A ay mas mababa sa o katumbas ng B.

Syntax:

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

Ang paghahambing sa pagitan ng A at B ay ipinapalagay ang sumusunod:

AssertLike

Nagbabalik totoo kung tumutugma ang string A sa isang partikular na pattern na naglalaman ng mga wildcard.

Syntax:

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

Ang mga sumusunod na wildcard ay tinatanggap:

AssertNotAlmostEqual

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.

Syntax:

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:

AssertNotEqual

Nagbabalik totoo kailan A at B ay hindi itinuturing na pantay.

Syntax:

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.

AssertNotIn

Nagbabalik totoo kapag ang A (isang string) ay hindi matatagpuan sa B.

Syntax:

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.

AssertNotInstance

Nagbabalik totoo kapag si A hindi isang halimbawa ng isang tinukoy na uri ng bagay.

Syntax:

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.

AssertNotLike

Nagbabalik totoo kung string A hindi tumugma sa ibinigay na pattern na naglalaman ng mga wildcard.

Syntax:

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.

AssertNotNothing

Nagbabalik totoo maliban kung ang A ay isang bagay na mayroong wala halaga.

Syntax:

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

AssertNotNull

Nagbabalik totoo maliban kung si A ay may Null halaga.

Syntax:

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

AssertNotRegex

Nagbabalik totoo kapag si A hindi isang string o hindi tumugma sa ibinigay na regular na expression.

Syntax:

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

Case-sensitive ang paghahambing.

AssertRegex

Nagbabalik totoo kapag tumugma ang string A sa ibinigay na regular na expression.

Syntax:

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

Case-sensitive ang paghahambing.

AssertTrue

Nagbabalik totoo kapag ang expression A ay a Boolean at ang halaga nito ay totoo .

Syntax:

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

Fail

Pinipilit na mabigo ang isang test case.

Syntax:

svc.Fail(message: str = "")

Maaaring magbigay ng mensahe upang maiulat sa console.

Log

Isinulat ang tinukoy mensahe sa console.

Syntax:

svc.Log(message: str = "")

Maaaring magbigay ng mensahe upang maiulat sa console.

ReportError

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.

Syntax:

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.

RunTest

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:

  1. Isinasagawa ang opsyonal Setup pamamaraan na nasa modyul.

  2. Isinasagawa nang isang beses ang bawat test case, sa walang partikular na pagkakasunud-sunod.

  3. Isinasagawa ang opsyonal TearDown paraan na nasa modyul.

Syntax:

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.

SkipTest

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.

Syntax:

svc.SkipTest(message: str = "")

Kung a mensahe ay ibinigay, ito ay nakasulat sa console.

Mangyaring suportahan kami!