Testovanie kódu pomocou Unit Testing nástroja Caché

cache.jpg Koľ­kí z nás vý­vo­já­rov mô­žu na otáz­ku, či tes­tu­jú svoj kód, od­po­ve­dať úp­rim­ne: áno? Asi väč­ši­na, ale koľ­kí z nás mô­žu klad­ne od­po­ve­dať na otáz­ku: „Ste si nao­zaj is­tí, že tes­tu­je­te svoj kód dos­ta­toč­ne?“ Pre všet­kých, kto­rí chcú mať is­to­tu, že svoj kód pred na­sa­de­ním u zá­kaz­ní­kov dob­re otes­tu­jú a do­la­dia, je ur­če­ný ten­to prís­pe­vok.

Je­den z prís­tu­pov k efek­tív­ne­mu pí­sa­niu fun­kčné­ho kó­du je prog­ra­mo­va­nie ria­de­né tes­to­va­ním, v an­glic­kom ori­gi­ná­li test dri­ven prog­ram­ming. V skrat­ke to zna­me­ná, že prog­ra­má­tor pred­tým, než vô­bec za­čne pí­sať kód, si sad­ne a na­pí­še všet­ky mož­né tes­ty bu­dú­ce­ho kó­du. Po­tom na­pí­še kód, ap­li­ku­je tes­ty a cyk­lus opa­ku­je. Asi sa zhod­ne­me na tom, že v praxi je po­mer­ne ťaž­ké dodr­žať ten­to prís­tup, le­bo sme všet­ci netr­pez­li­ví, ne­bu­de­me sa pred­sa zdr­žo­vať pí­sa­ním nie­čo­ho iné­ho ako cie­ľo­vé­ho kó­du. No keď už tes­ty ne­pí­še­me pre všet­ky mož­né si­tuácie a vop­red, as­poň tie hlav­né je veľ­mi vhod­né vy­tvo­riť, ho­ci aj sú­bež­ne ale­bo do­da­toč­ne ku kó­du. 

Cac­hé po­nú­ka už ne­ja­ký čas sú­bor tried ob­siah­nu­tých v ba­líč­ku % Unit­Tes­ting. Prá­ca s ba­líč­kom je jed­no­duc­há a je de­tail­ne opí­sa­ná v on-li­ne do­ku­men­tá­cii, tak­že tu len struč­ne s ma­lou ukáž­kou. 

1. Vy­tvo­rí­me trie­dy s ap­li­kač­ným kó­dom, kto­rý nes­kôr bu­de­me chcieť tes­to­vať.
2. Vy­tvo­rí­me jed­nu ale­bo viac tes­to­va­cích tried od­de­le­ním od % Unit­Tes­ting.Tes­tCa­se.
3. Pre kaž­dú tes­to­va­nú fun­kčnosť de­fi­nu­je­me sa­mos­tat­nú me­tó­du za­čí­na­jú­cu sa re­ťaz­com "Test". To je dô­le­ži­té, pre­to­že iba tak­to po­me­no­va­né me­tó­dy sa bu­dú nás­led­ne vy­ko­ná­vať v prie­be­hu tes­to­va­nia.
4. Te­raz expor­tu­je­me trie­dy ako XML do vop­red ur­če­né­ho tes­to­va­cie­ho ad­re­sá­ra. Ko­re­ňo­vý tes­to­va­cí ad­re­sár je da­ný hod­no­tou glo­ba­le ^ Unit­Tes­tRoot, kto­rú ne­za­bud­ne­me nas­ta­viť. Export tried je dô­le­ži­tý, pre­to­že vý­cho­dis­ko­vým sprá­va­ním unit test ma­na­ge­ra je zma­za­nie de­fi­ní­cií tes­to­va­cích tried po vy­ko­na­ní tes­tov.
5. V ter­mi­ná­li spus­tí­me sú­bor tes­tov prí­ka­zom d # # class (% Unit­Test.Ma­na­ger). Run­Test ([ná­zov ad­re­sá­ra])>, kde [ná­zov ad­re­sá­ra] ozna­ču­je buď ko­re­ňo­vý ad­re­sár (ak je prázd­ny), ale­bo po­dad­re­sár s expor­to­va­ným trie­da­mi v sú­bo­roch XML.
6. V prie­be­hu vy­ko­ná­va­nia jed­not­li­vých tes­tov sa bu­de na ter­mi­ná­li zob­ra­zo­vať vý­pis jed­not­li­vých me­tód a ich vý­sled­kov, na kon­ci vý­pi­su po­tom bu­de uve­de­ný od­kaz na strán­ku CSP s vý­sled­ka­mi.

Pri tvor­be tes­to­va­cích tried mô­že­me vy­užiť pred­de­fi­no­va­né mak­rá a me­tó­dy po­chád­za­jú­ce z trie­dy % Unit­Test.Tes­tCa­se. Jed­nak mô­že­me nas­ta­viť po­moc­né pre­men­né a up­ra­tať po se­be, jed­nak po­mo­cou ma­kier vy­ko­ná­vať vy­hod­no­co­va­nie rôz­nych dru­hov vý­ra­zov. Všet­ky mak­rá s vý­nim­kou lo­go­va­nia sa za­čí­na­jú re­ťaz­com $ $ $ As­sert .... Nap­rík­lad mak­ro $ $ $ SAs­sertStat­us­OK kon­tro­lu­je, či náv­ra­to­vá hod­no­ta ty­pu % Sta­tus vra­cia hod­no­tu OK (1) ale­bo chy­bo­vý stav. Mies­to ma­kier mô­že­me vo­lať aj me­tó­dy za­čí­na­jú­ce sa na "As­sert", pri­čom ako pr­vý ar­gu­ment za­dá­me hod­no­tu 1 (autoquoted). A te­raz jed­no­duc­hý prík­lad: 

Class tt.Tip18  [ Abstract ]
 {
□ clas­smet­hod Sec­ti (a as %Float, b as %Float) as %Float
   {
       quit a + b
   }
□ clas­smet­hod  Po­del (a as %Float, b as %Float) as %Float
   {
               try  {
                      set  c=a/b
               }  catch  (ex)   {
                      //   jed­no­du­se es­ka­lu­je­me vzjim­ku vo­la­ji­ci­mu ko­du
                      throw ex
               } 
               quit  c
    }
  }

Tá­to jed­no­duc­há trie­da im­ple­men­tu­je dve me­tó­dy - Sec­ti a Po­del. My bu­de­me tes­to­vať nas­le­du­jú­ce prí­pa­dy:
- Sec­ti(1,2) = 3
- Sec­ti(1,2) != 4
- Po­del(6,2) = 3
- Po­del(1,0) vra­cia chy­bu DI­VI­DE

Po­dľa uve­de­né­ho ná­vo­du zos­ta­ví­me tes­to­va­ciu trie­du:

   Class tt.uni­test.Tip18 Extends %Unit­Test.Tes­tCa­se
   {
□Met­hod Tes­tSec­tiOK()
     {
           do  ..As­sertEquals­ViaM­acr­o (1,##class(tt.Tip18).Sec­ti(1,2),3,”Sec­ti(1,2)=3“)
     }
□Met­hod Tes­tSec­ti­NOK()
     {
           do  ..As­sertEquals­ViaM­acr­o (1,##class(tt.Tip18).Sec­ti(1,2),4,”Sec­ti(1,2) !=4“)
     }
□Met­hod Tes­tTes­tPo­de­lOK()
    {
           do  ..As­sertEquals­ViaM­acr­o (1,##class(tt.Tip18).Po­del(6,2),3,”Po­del(6,2)=3“)
     }
□Met­hod Tes­tPo­del­Nu­lou()
  {
           try {
                 set res=##class(tt.Tip18) .Po­del(1,0)
          }  catch  (ex)   {
                 do  ..Log­Mes­sa­ge (“Za­chy­ce­na oce­ka­va­na vy­jim­ka  “_ex.Dis­playS­tring  ())
        }
       Quit
  }
}
A te­raz už mô­že­me otes­to­vať: 

SYM>d ##class(%Unit­Test.Ma­na­ger).Run­Test("SYM")
===============================================================================
Di­rec­to­ry: D:\Cac­he\Da­ta­Sets\MAS­TER\Unit Test Root\SYM\
===============================================================================
SYM be­gins ...
Load of di­rec­to­ry star­ted on 01/29/2010 15:38:45 '*.xml;*.XML' 
Loa­ding fi­le D:\Cac­he\Da­ta­Sets\MAS­TER\Unit Test Root\SYM\Tip18.xml as xml
Im­por­ted class: tt.uni­test.Tip18
Com­pi­la­tion star­ted on 01/29/2010 15:38:45 with quali­fiers 'ck'
Com­pi­ling class tt.uni­test.Tip18
Com­pi­ling rou­ti­ne tt.uni­test.Tip18.1
Com­pi­la­tion fi­nis­hed suc­ces­sful­ly in 0.058s. 
Load fi­nis­hed suc­ces­sful­ly.
  tt.uni­test.Tip18 be­gins ...
    Tes­tPo­del­Nu­lou() be­gins ...
      Log­Mes­sa­ge:Za­chy­ce­na oce­ka­va­na vy­jim­ka  18 zPo­del+2^tt.Tip18.3
      Log­Mes­sa­ge:Du­ra­tion of execu­tion: .000122 sec.
    Tes­tPo­del­Nu­lou pas­sed
    Tes­tPo­de­lOK() be­gins ...
      As­sertEquals:Po­del(6,2)=3 (pas­sed)
      Log­Mes­sa­ge:Du­ra­tion of execu­tion: .000042 sec.
    Tes­tPo­de­lOK pas­sed
    Tes­tSec­ti­NOK() be­gins ...
      As­sertNot­Equals:Sec­ti(1,2)!=4 (pas­sed)
      Log­Mes­sa­ge:Du­ra­tion of execu­tion: .000046 sec.
    Tes­tSec­ti­NOK pas­sed
    Tes­tSec­tiOK() be­gins ...
      As­sertEquals:Sec­ti(1,2)=3 (pas­sed)
      Log­Mes­sa­ge:Du­ra­tion of execu­tion: .000032 sec.
    Tes­tSec­tiOK pas­sed
  tt.uni­test.Tip18 pas­sed
SYM pas­sed
Use the following URL to view the re­sult:
http://KU­TAC:57772/csp/sam­ples/%25U­nit­Test.Re­port.cls?NS=SYM&IN­DEX=2
SYM>

V bu­dú­cej čas­ti sa bu­de­me ve­no­vať vy­uži­tiu po­uží­va­teľ­skej pro­jek­cie pre Unit Tes­ting. Ďal­šie za­ují­ma­vé di­ely se­riá­lu Ti­py a tri­ky s Cac­hé, kto­ré vy­chád­za­jú už od ro­ku 2005, náj­de­te na stiah­nu­tie tu: http://www.inter­sys­tems.cz/edu­ca­tion/uni­ver­si­ty/se­ria­ly/ti­pyT­ri­ky­Cac­he.html

Ďal­šie čas­ti >>

Zdroj: Infoware 1-2/2011



Ohodnoťte článok:
   
 

24 hodín

týždeň

mesiac

Najnovšie články

No­vá im­ple­men­tá­cia dy­na­mic­ké­ho SQL
Kedysi dávno sme sa venovali tvorbe dopytov s použitím ručne písaného kódu bez jazyka SQL. V tejto časti si, naopak, ukážeme, akým spôsobom sa v Caché vyvíjali dopyty, a oboznámime sa s najnovšou implementáciou dynamických dopytov SQL. čítať »
 
Dy­na­mic­ké od­ba­ve­nie vlas­tnos­tí a me­tód tried
V tejto časti nášho seriálu sa oboznámime s veľmi užitočnou schopnosťou tried Caché, ktorá je k dispozícii už dlhší čas, ale až v posledných verziách sa dostáva viac do popredia čítať »
 
Prá­ca s trie­dou %In­staller
V tomto pokračovaní seriálu vám ukážeme použitie ešte stále pomerne čerstvej novinky, určenej na používateľskú úpravu inštalácie Caché. čítať »
 
Vy­uži­tie po­uží­va­teľ­skej pro­jek­cie na Unit Tes­ting
V predchádzajúcej časti sme sa oboznámili s balíčkom % UnitTesting a ukázali sme na praktickom príklade, ako s ním pracovať. Asi vám v priebehu čítania napadlo, či by nebolo možné tvorbu testovacích tried nejako automatizovať. čítať »
 
Tes­to­va­nie kó­du po­mo­cou Unit Tes­ting nás­tro­ja Cac­hé
Koľkí z nás vývojárov môžu na otázku, či testujú svoj kód, odpovedať úprimne: áno? čítať »
 
Try – catch ošet­re­nie chýb a pre­po­je­nie do sys­té­mo­vé­ho pro­to­ko­lu chýb
Na početné otázky priaznivcov programovania s vysokovýkonnou objektovou databázou InterSystems Caché vám prinášame niekoľko aktuálnych tipov a trikov. čítať »
 
 
 
  Zdieľaj cez Facebook Zdieľaj cez Google+ Zdieľaj cez Twitter Zdieľaj cez LinkedIn Správy z RSS Správy na smartfóne Správy cez newsletter