ExpectedException atribuut Visual Studio 2008 ja Visual Studio 2010 all
15.10.2009 | Gunnar
Tänane kanne Visual Studio 2010 seeriast peaks meelt mööda olema neile, kes teste kirjutavad. Visual Studio 2010 toob endaga kaasa täiendused testidesse, mis võimaldavad lõpuks ometi Visual Studio 2010 enda teste kasutada.
Visual Studio 2008 testide probleemid
Visual Studio 2008 testid on probleemsed. Keegi kodanik tegi saatusliku otsuse järgida testide osas iganenud kontseptsiooni, millest isegi Microsofti arendajad kinni pole pidanud ning tulemuseks oli kasutuskõlbmatu testide tugi. Probleem seisneb selles, et Visual Studio 2008 testide mehanism pole võimeline System.Exception tüüpi vigu korrektselt käsitlema.
Mõned sõnad tausta kohta ka. Kunagi ammu pidi olema nii, et System.Exception on kõikide vigade baasklass, millest pärivad järgmised kaks põhilist vigade klassi: System.SystemException ja System.ApplicationException. Neist esimene oli mõeldud .Net raamistikku koosseisu kuuluvate klasside süsteemsete tõrgete jaoks ja teine kõikidele kasutajate kirjutatud rakendustele. Aga et System.Exception ei ole abstraktne klass, siis edasi võite juba ise mõelda, kas eeltoodust kinni ka peeti või mitte…
Vaatame näiteks järgmist testi.
Selle käivitamisel saame sellise tulemuse.
![]()
Veateade on järgmine: UTA017: TestProject1.UnitTest1.ThisTestFails has invalid ExpectedException attribute. The type must inherit from Exception. Seda ma käsitlen Visual Studio 2008 seni parandamata veana, sest System.Exception ei ole abstraktne klass ja sellest instantside loomist ei saa keelata ka FxCop või koodi analüüsimise vahenditega – kompilaator laseb selle klassi loomise ikkagi läbi.
Kuniks Visual Studio 2008 on viimane valmis versioon ja selle vea parandamisest pole tootja huvitatud, soovitan alternatiividena kasutada näiteks selliseid tooteid nagu nUnit või xUnit.
Visual Studio 2008 testide häkid
Visual Studio 2008 testide jaoks on olemas mõned häkid, mille abil testid kasutatavaks muutuvad. Mitte, et ma neid häkke soovitaksin – nende tulemuseks on siiski korralikult ära solgitud testide kood.
Aga et me eluteed võivad alati ristuda koodist kõike teadvate kodanikega, kes viimati nägid koodi 10 aastat tagasi ülikoolis põgusalt, kuid kes see-eest siiski programmeerimisest kõike teavad ja meie mõistes äärmiselt veidraid otsuseid teinekord peale suruvad, siis pakun välja taoliste haiguste üle elamiseks paar nõksu.
Esimene häkk seisneb selles, et muudame ära vea tüübi.
Teine häkk seisneb selles, et kontrollime vea tüüpi.
Ükskõik kumba neist häkkidest ei rakendaks, on tulemuseks õnnestuv test. Täpselt nii nagu näitab järgmine ekraanpauk.
Aga rõhutan veelkord üle – kasutage neid teste ja häkke ainult juhul, kui peaprogrammeerija valikul on viga tehtud või keegi vaheastme juht on ennast progemises kompetentseks mõelnud ja teeb “suuri otsuseid”.
Visual Studio 2010 testid töötavad
Proovime nüüd Visual Studio 2010 peal käivitada testi, mis ootab System.Exception tüüpi vea tekkimist.
Tulemus on selline.
Näeme, et kõik läks nii nagu ootasime.
Kokkuvõtteks
Kuigi kanne keskendus peamiselt Visual Studio 2008 testide probleemile ja pakkus välja paar räiget lahendust, on heaks uudiseks siiski see viimane lühike peatükk – Visual Studio 2010 testid on eeltutvustatud probleemidest vabad.
