Michal Podzimek 6. 11. 2013



Podobné dokumenty
Testovací metoda. Testovací metoda. public class SimpleTest {

20. Projekt Domácí mediotéka

Typický prvek kolekce pro české řazení

PREPROCESOR POKRAČOVÁNÍ

Programování v Javě I. Únor 2009

JAVA Unit testing Java, zimní semestr

Algoritmizace a programování

Programování v Javě I. Leden 2008

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Java a XML. 10/26/09 1/7 Java a XML

Projekty pro výuku programování v jazyce Java

public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

JAVA V Hibernate Java, letní semestr

Java - řazení objektů

OSGi. Aplikační programování v Javě (BI-APJ) - 6 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Úvod do programovacích jazyků (Java)

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Jazyk C# a platforma.net

Teoretické minimum z PJV

Spring framework 2.0. Roman Pichlík CZJUG

Principy objektově orientovaného programování

Čipové karty Lekařská informatika

Zvýšení zabezpečení počítače

3 Vývojová prostředí, základní prvky jazyka Java, konvence jazyka Java

UJO Framework. revoluční architektura beans. verze

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Generické programování

Neměnné objekty. Tomáš Pitner, upravil Marek Šabo

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

DPKOM_06 Dědičnost entit a zpětná volání posluchači

Programování v C++ 3, 3. cvičení

Specifikace exportního rozhraní z aplikace

Postřehová hra. Zadání projektu. 1 Moje cíle

Úvod do programování v jazyce Java

5 Rekurze a zásobník. Rekurzivní volání metody

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Vláknové programování část V

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

OOPR_05. Případové studie

Maven. Aplikační programování v Javě (BI-APJ) - 2 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Přehled probírané látky

Začínáme s vývojem pro Android

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

MASARYKOVA UNIVERZITA V BRNĚ FAKULTA INFORMATIKY

Základy Guice Vazby Scopes. Google Guice. základní seznámení s frameworkem Google Guice

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Vytváření a použití knihoven tříd

3 KTE / ZPE Informační technologie

ios Cvičení RSS čtečka

8 Třídy, objekty, metody, předávání argumentů metod

Anotace Test. Označuje public void metodu, která může být spuštěna jako test. Parametr expected označuje vyjimku, která by měla být v metodě vyvolána

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Komponenty v.net. Obsah přednášky

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Obrázek 6.14: Prohlížec nápovedy

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Jazyk C# (seminář 5)

Infrastruktura UML. Modelování struktury v UML. Superstruktura UML. Notace objektů. Diagramy objektů

Android 100% Java telefon. Petr Musil

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

WPA - Konfigurace Java EE aplikace (Maven, struktura war arch. kontejnerem Tomcat 8

Reflexe RTTI Runtime Type Identification

Java a Caché IV: Manipulace s objekty

Distribuované systémy a výpočty

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz

1. Téma 12 - Textové soubory a výjimky

Jazyk C# (seminář 6)

Jazyk C# (seminář 3)

Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Programování v jazyku C# II. 9.kapitola

Motivační příklad reálný svět. výroba (assembly line)

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Programovací software Oblast režimů Oblast nástrojů Složka aplikací pro různé funkce: Oblast tlačítek Tlačítko Loading (Načítání)

Lambda funkce Novinky v interfaces Streamy Optional - aneb zbavujeme se null. Java 8. Ondřej Hrstka

Distribuované systémy a výpočty

KIV/PIA 2013 Jan Tichava

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

Agenda. Docházka Návrat k minulému praktickému cvičení Zápočtové práce. Dokumentace. Dotazy, přání, stížnosti. Co, jak a proč dokumentovat

IoC/DI. Tomáš Herceg Microsoft MVP (ASP.NET)

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Instalace MS SQL Server 2005 a nastavení programu DUEL pro síťový provoz

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Seminář Java II p.1/43

Enterprise Java Beans 3.0

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.


Iterator & for cyklus

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

11. Dědičnost. Dědičnost strana 103

Transkript:

Testování Test NG Michal Podzimek 6. 11. 2013

1 Úvod

public class SimpleTest { @BeforeClass public void setup() { // code that will be invoked // when this test is instantiated @Test public void afasttest() { System.out.println("Fast test"); @Test public void aslowtest() { System.out.println("Slow test"); Testovací metoda Testovací metoda

public class SimpleTest { @BeforeClass public void setup() { // code that will be invoked // when this test is instantiated @Test(groups = { "fast" ) public void afasttest() { System.out.println("Fast test"); @Test(groups = { "slow" ) public void aslowtest() { System.out.println("Slow test"); Testovací skupina Testovací skupina

<test name="t1" > <classes> <class name="simpletest"> <methods> <include name="afasttest" /> </methods> </class> </classes> </test> Test

<test name="t1" > <classes> <class name="simpletest"> <methods> <include name=".*fast.*" /> </methods> </class> </classes> </test> Test

<test name="t2" > <classes> <class name="simpletest" /> </classes> </test> Test

<test name="t3"> <packages> <package name="test.sample" /> </packages> </test> Test

<test name="t4"> <groups> <run> <exclude name="fast" /> <include name="slow" /> </run> </groups> Test <classes>... </classes> </test>

<suite name="s1" verbose="1"> <test name="t1">... </test> <test name="t2">... </test> <test name="t3">... </test> </suite> Test Suite

Shrnutí Konfigurace anotacemi @Test xml souborem Granularita testovací metody ~> skupiny testovací metody / skupiny ~> testy ~> suits

@Test Označuje spustitelnou testovací metodu lze použít u celé třídy

@Test Označuje spustitelnou testovací metodu lze použít u celé třídy tzv. class-level annotation pak jsou implicitně označeny všechny public metody @Test public class SimpleTest { public void afasttest() { System.out.println("Fast test"); Testovací metoda

Jiný příklad Přidávat metody do skupiny na úrovni třídy všechny testovací metody pak patří do této skupiny @Test(groups = { "integration-test" ) public class SimpleTest { @Test(groups = { "fast" ) public void afasttest() { System.out.println("Fast test");

@Test Atributy groups enabled seznam skupin, do kterých testovací metoda patří je testovací metoda povolena? (přepínač) expectedexceptio seznam očekávaných výjimek ns pro testování okrajových podmínek description popisek testovací metody

Co dál umí TestNG? Závislosti mezi testovacími metodami @Test public void startserver() { System.out.println("Starting server."); @Test(dependsOnMethods = { "startserver" ) public void dosomethingwithserver() { System.out.println("Doing things on server.");

Co dál umí TestNG? Závislosti mezi testovacími metodami @Test public void startserver() { System.out.println("Starting server."); hard dependency @Test(dependsOnMethods = { "startserver" ) public void dosomethingwithserver() { System.out.println("Doing things on server.");

Co dál umí TestNG? Závislosti mezi testovacími metodami @Test public void startserver() { System.out.println("Starting server."); soft dependency @Test(dependsOnMethods = { "startserver", alwaysrun = true) public void dosomethingwithserver() { System.out.println("Doing things on server.");

Co dál umí TestNG? Závislosti mezi testovacími metodami lze definovat i závislost na skupině @Test(groups = { "init" ) public void startserver() { System.out.println("Starting server."); @Test(dependsOnGroups = { "init" ) public void dosomethingwithserver() { System.out.println("Doing things on server.");

Co dál umí TestNG? Obecnou inicializaci před testem a uklízení po testu velmi jemná granularita @BeforeSuite / @AfterSuite @BeforeTest / @AfterTest @BeforeGroups / @AfterGroups @BeforeClass / @AfterClass @BeforeMethod / @AfterMethod takto anotovaných metod může být více použijí se všechny

Co dál umí TestNG? Pouštět testy ve více vláknech <suite name="s1" parallel="methods" threadcount="5"> <suite name="s2" parallel="tests" thread- count="5"> <suite name="s3" parallel="classes" threadcount="5">

Co dál umí TestNG? Pouštět test vícekrát z různých vláken vlákna běží současně @Test(threadPoolSize = 3, invocationcount = 10) public void dosomethingwithserver() { System.out.println("Doing things on server.");

Co dál umí TestNG? Specifikovat timeout (v milisekundách) už žádné rogue testy, které blokují vlákno navždy @Test(threadPoolSize = 3, invocationcount = 10, timeout=10000) public void dosomethingwithserver() { System.out.println("Doing things on server.");

Co dál umí TestNG? Parametrizovat testy

Co dál umí TestNG? Parametrizovat testy přímo v konfiguraci jednoduché a rychlé ale méně flexibilní smíte mít jenom String parametry mohou být nepovinné anotace @Optional

Parametry testů Speciální anotace @Parameters parametry se mapují podle pořadí, ne podle jmenné konvence + @Test @Parameters({ "first-name", "last-name" ) public void dosomethingwithserver( String firstname, String lastname) { System.out.println(firstName + " " + lastname server."); " is doing things on

Parametry testů Definice hodnot parametrů v ngconfig.xml <suite name="s1"> <parameter name="first-name" value="erik" /> <parameter name="last-name" value="kratochvíl" />... </suite> <suite name="s2"> <parameter name="first-name" value="martin" /> <parameter name="last-name" value="hlavatý" />... </suite>

Co dál umí TestNG? Parametrizovat testy přes tzv. DataProvider java metoda, která vrací pole polí obsahující jednotlivé hodnoty parametrů testy se pouští opakovaně pro každý řádek parametrů velmi silný nástroj testovací data lze načítat z DB, XML prostě odkudkoli

Data Provider Speciální anotace @DataProvider metoda vrací Object[][] nebo Iterator<Object[]> @Test(dataProvider = "namesprovider") public void doespersonlive( String firstname, String lastname) {... @DataProvider(name = "namesprovider") public Object[][] providenames() { return new Object[][] { { "Erik", "Kratochvíl", { "Thales", "Milétský"

DataProvider Alternativní způsob specifikace parametrů. Použití: @Test(dataProvider = "jmeno") Zdroj dat - @DataProvider Statická metoda nebo metoda třídy, ve které je provider použit. Vrací pole polí objektů. Testy se pouští opakovaně pro každý řádek (pole parametrů) vrácený DataProviderem.

Co dál umí TestNG? Žít s JDK 1.4 používají se anotace v JavaDoc Definovat vlastní interceptory a listenery měnit nebo monitorovat chování TestNG sledovat volání testovacích metod měnit pořadí testovacích metod "Dynamické" testování Factory vyrábí testovací třídy s danými parametry vhodné, pokud je obor hodnot parametrů velký

2 Bodované úkoly

Testovací aplikace Rozbalit projekt z emailu Importovat do workspace File -> Import -> Existing projects into workspace Lze spouštět buď pomocí ANT nebo Eclipse pluginu (doporučeno) Help -> Install new software Work with = http://beust.com/eclipse a Add Zaškrtnout TestNG a klikat na Next Restartovat Eclipse

Úkol 1 Spusťte všechny testy a prohlédněte si výstup v konzoli pokud používáte Eclipse plugin tak si prohlédněte i výstup v TestNG view Zajistěte, aby se nespouštěly testy, které neprocházejí Musí být možné opět rychle tyto testy spustit (bez zásahu do kódu)

Úkol 2 Upravte Ukol1Test tak, aby byly otestovány všechny dle vašeho názoru důležité vstupy Upravte Ukol2Test napište test Upravte Ukol2Test napište test metody Ukol2.krat

Úkol 3 Upravte Ukol2Test tak, že Implementujete metodu testkrat využijte DataProvider Otestujete minimálně, že: 2 * 3 = 6 0 * 3 = 0-1 * -1 = 1 1 000 000 000 * 1 = 1 000 000 000

Úkol 4 Zjistěte pomocí TestNG, která ze standardních Java tříd StringBuilder a StringBuffer je thread-safe.

Odevzdávání Na cvičeních Mailem na michal.podzimek@profinit.eu soubor ngconfig.xml zdrojové soubory, které jste měnili měly by to být jen Ukol1Test.java Ukol2Test.java Ngconfig.xml deadline za 14 dní

Děkujeme za pozornost Profinit, s.r.o., Tychonova 2, 160 00 Praha 6 Tel: +420 224 316 016, www.profinit.eu