Jakub Čermák jakub@jcermak.cz, http://www.jcermak.cz Microsoft Student Partner
Testy ve VS - úvod Unit testy Testy ve VS featury a pokročilejší funkce Web testy DB testy Visual Studio 2010
Nástroje: Visual Studio 2008 Pro nebo Test edice, NUnit, Proč nedělat automatické testy? Čas + Peníze Přílišné spoléhání, chybná interpretace, zavádějící nekvalitní testy Proč ano Čas + peníze Ušetření repetitivních kroků Menší chybovost výsledku Nevynechávání testů Rychlejší hledání podstaty problému Integrace do Source Control (TFS) Nepřímo nutí programátora tolik neprasit
Otestování co nejvíce případů Standardní případy, krajní případy, chybové případy Otestování co nejvíce kódu Code coverage Kdo píše testy? Kdy psát testy před, po nebo během? Znalost zdrojáku?
Manual test Soubor s instrukcemi pro testera Unit test Testování jednotlivých částí aplikace vlastním kódem Database test Test databázových dotazů, stored procedur, Web test Zautomatizované proklikání webovou aplikací Load test + profiling Testování zátěže GUI Test (nový ve VS2010) Zautomatizované proklikání desktopovou aplikací
^ Dynamické testy funkcionality ------------------------ Statické testy (viz code contracts) Ergonomie Integrační testování Stabilita, výkon Bezpečnost Akceptace zákazníkem / uživatelem Tohle tlačítko mělo být modré!!
Vychází z extrémního programování Krátký vývojový cyklus Přidání nové featury: Napsání testů na ni Kontrola, zda test neuspěje Psaní kódu Kontrola, zda test uspěje Refactoring
= testovací metoda volající produkční kód a testující, zda jeho chování je OK Navzájem nezávislé Asserty ověřování výstupů a invariantů Statické metody třídy Assert Assert.IsTrue, Assert.AreEqual, Assert.IsInstanceOfType, Assert.Inconclusive nevyhodnotitelný test Test je OK Všechny asserty platí && nevyhozena neočekávaná výjimka Atribut [TestMethod]
Obsahující Testovací metody Jednorázová inicializace/úklid metody s [ClassInitialize] resp. [ClassCleanup] volané před a po všech testech Inicializace před a úklid po testu metody s [TestInitialize] resp. [TestCleanup] Označena atributem [TestClass]
Testování chybových stavů Atribut [ExpectedException(ExceptionType)] Test uspěl Všechny asserty platí && byla vyhozena právě zadaná výjímka
demo
Testy X Zapouzdření Potřebuji vidět dovnitř x potřebuji skrýt vnitřek C++ : friend metody a třídy.net:? Private accessor magická třída Zpřístupnění private a protected členů Var x = new PůvodníTřída_Accessor(); x.privatefunction();
demo
Pokrytí kódu testy Odhalení neúplnosti testů 100% CC!= 100% pokrytí všech případů! Metodika měření pomocí spouštění testů Ideál 100% path coverage všechny cesty otestovány Entry/exit coverage všechny možná volání a výstupy otestovány Prakticky 100% Code Coverage Okem tipnout path a entry/exit coverage Náchylné na opomenutí a chyby
demo
Strojové proklikávání webové aplikace Podle nahraného vzoru Možnost parametrizace (context, databinding,.) Převeditelné na unit test Extraction rules Vytažení hodnot z odpovědi serveru do kontextu testu Name-value kolekce Context parameter name název v kontextu Validation rules Kontrola správnosti odpovědi Obdoba Assertů Test uspěl všechny stránky existují a fungují (HTTP OK) && všechny validation rules uspěly
Vlastní Extraction rules Potomek ExtractionRule Vlastní Validation rules Potomek ValidationRule Výsledek validace do e.isvalid WebTestPlugin Akce před a po testu WebTestRequestPlugin Akce před a po requestu
demo
Interně spec. forma unit testu Validace DB dotazu, stored procedure, funkce či jiného SQL kódu Sledování různých kritérií Jak správnost tak výkon Vlastní kritéria????? Test OK dotaz byl úspěšný && všechna kritéria splněna
demo
Beta 1 Data Collector Zobecnění profileru, code coverage sledování, Sbírá informace o procesu během testu Možnost psát vlastní Test impact Vyžaduje TFS Sledování potenciálních změn výsledků testů v důsledku změn kódu UI testy Automatizované proklikání desktopovou aplikací
http://www.jcermak.cz/prednasky.aspx Slajdy a dema k přednášce http://vbnet.cz/clanek--133- zaklady_testovani_aplikaci_pomoci_visual_ studia.aspx Článek MSDN Google nebo Bing ;)
2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.