Jakub Čermák
[email protected], 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--133zaklady_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.