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

Podobné dokumenty
Obsah Kapitola 1. Úvod...13 Kapitola 2. Základní pojmy...17

Testovací metoda. Testovací metoda. public class SimpleTest {

JAVA Unit testing Java, zimní semestr

Michal Podzimek

Anywhere - IT-break. Milan Lempera UnitTest.cz

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

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

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

JAVA V Hibernate Java, letní semestr

Jazyk C# (seminář 3)

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

Testování software. Jaroslav Žáček

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

Z. Kotala, P. Toman: Java ( Obsah )

Semin aˇr Java N astroje Radek Koˇc ı Fakulta informaˇcn ıch technologi ı VUT Bˇrezen 2012 Radek Koˇc ı Semin aˇr Java n astroje 1/ 42

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Jazyk C# (seminář 6)

Algoritmizace a programování

Java Enum Java, zimní semestr ,2017 1

Testování software. Jaroslav Žáček

JAVA Unit testing Java, zimní semestr

Správa projektů a testování

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

RMI Remote Method Invocation

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

Doxygen. Jakub Břečka

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

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

UJO Framework. revoluční architektura beans. verze

PROGRAMOVÁNÍ V C++ CVIČENÍ

Java - výjimky. private void vstup() throws IOException {... }

Ant aneb Ferda Mravenec, práce všeho druhu

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

Algoritmizace a programování

NPRG031 Programování II 1 / :25:46

NMIN201 Objektově orientované programování 1 / :36:09

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Výčtový typ strana 67

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

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

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Principy objektově orientovaného programování

10 Generické implementace

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

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

Generické programování

PREPROCESOR POKRAČOVÁNÍ

Soubor jako posloupnost bytů

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

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

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

Abstraktní datové typy: zásobník

Java Výjimky Java, zimní semestr

PŘETĚŽOVÁNÍ OPERÁTORŮ

Výjimky. v C# a Javě

1. Programování proti rozhraní

JAVA V Anotace Java, zimní semestr ,2014 1

Jazyk C++ II. Šablony a implementace

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

INSTALACE PRODUKTU ONTOPIA KNOWLEDGE SUITE

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

Programování v Javě I. Leden 2008

Úvod do programovacích jazyků (Java)

Java testovací třída

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

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Java Řetězce Java, zimní semestr

Čipové karty Lekařská informatika

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

PB161 Programování v jazyce C++ Přednáška 7

Jakub Čermák Microsoft Student Partner

Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Jazyk C# a platforma.net

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Vývoj aplikací řízený testy. Miroslav Beneš

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

Iterator & for cyklus

Web Services na SOAP

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

Regulární výrazy. Vzory

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

Obsah přednášky. Vývoj aplikací řízený testy. Extrémní programování (XP) Požadavky na nástroje pro XP. Testování aplikací

PB161 Programování v jazyce C++ Přednáška 7

IB111 Úvod do programování skrze Python Přednáška 7

Dědění, polymorfismus

FG Forrest, a.s. Jan Novotný. Automatické testování v praxi 2.

Zápis programu v jazyce C#

Tvorba informačních systémů

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

Distribuované systémy a výpočty

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

Úvod do programovacích jazyků (Java)

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

X-komponenty 3.1. Uživatelská příručka. J. Kocman, V. Trojan

Transkript:

junit 4 Petr Fanta

Anotace Test @Test Označuje public void metodu, která může být spuštěna jako test @Test(expected=Exception.class) Parametr expected označuje vyjimku, která by měla být v metodě vyvolána @Test(timeout=100) Parametr timeout určuje maximální dobu běhu testu (měřeno v milisekundách)

Asserty Jsou definované jako statické metody třídy Assert Jsou zaznamenány pouze asserty, které selžou Příklady: assertarrayequals(t[] expecteds, T[] actuals) assertequals(t expected, T actual) assertfalse(boolean condition) assertnotnull(object object) assertsame(object expected, Object actual) asserttrue(boolean condition) assertthat(t actual, org.hamcrest.matcher<t> matcher) fail()

Fixtures Slouží k vytvoření prostředků použitých ve více testech @Before Označuje metodu, která je volána před každým testem @After Označuje metodu, která je volána po každém testu @BeforeClass Označuje public static void metodu, která je volána pouze jednou před všemi testy v dané třídě @AfterClass Označuje public static void metodu, která je volána pouze jednou po všech testech v dané třídě

Anotace Ignore @Ignore Slouží k označení metody nebo třídy, která se mé vynechat při spuštění testu Příklad: @Ignore("Test is ignored as a demonstration") @Test public void testsane() { assertthat(1, is(1));

Anotace RunWith Pokud je třída anotována s @RunWith, použije se ke spuštění testů třída určená v parametru místo defaultního junit runneru Příklad: @RunWith(Suite.class) @SuiteClasses(ATest.class, BTest.class, CTest.class) public class ABCSuite {

Parametrizované testy Ke spuštění parametrizovaných testů složí runner Parameterized.class @Parameters Označuje public static metodu vracejicí List<Object[]>, kde jednotlivé prvky Object[] jsou použity jako parametry construktoru parametrizované třídy

@RunWith(Parameterized.class) public class FibonacciTest { @Parameters public static List<Object[]> data() { return Arrays.asList(new Object[][] { { 0, 0, { 1, 1, { 2, 1, { 3, 2, { 4, 3, { 5, 5, { 6, 8 ); private int finput; private int fexpected; public FibonacciTest(int input, int expected) { finput= input; fexpected= expected; @Test public void test() { assertequals(fexpected, Fibonacci.compute(fInput));

Pravidla Pravidla umožňují předefinování chování každého testu ve třídě Umožňují přístup k informacím o testu uloženým v junit @Rule Označuje public field (ne static), které jsou typu odvozeného od TestRule. ErrorCollector: umožňuje zachycení více chyb v jednom testu ExpectedException: umožňuje zpracování výjimek vyvolaných uvnitř testu ExternalResource: umožňuje například zpuštění a zastavení serveru TemporaryFolder: slouží k vytváření souborů, které budou po testu smazány TestName: obsahuje jméno testu pro použití v jeho průběhu TestWatcher: přidává logiku k průběhu test (např. událost při neúspěchu testu ) Timeout: nastavuje maximální dobu běhu testu Verifier: způsobí neúspěch testu pokud je objekt v nekorektním stavu

ErrorCollector Pravidla - příklady public static class UsesErrorCollectorTwice { @Rule public ErrorCollector collector= new ErrorCollector(); @Test public void example() { collector.adderror(new Throwable("first thing went wrong")); collector.adderror(new Throwable("second thing went wrong")); collector.checkthat(getresult(), not(containsstring("error!"))); // all lines will run, and then a combined failure logged at the end.

Pravidla - příklady TemporaryFolder public static class HasTempFolder { @Rule public TemporaryFolder folder= new TemporaryFolder(); @Test public void testusingtempfolder() throws IOException { File createdfile= folder.newfile("myfile.txt"); File createdfolder= folder.newfolder("subfolder"); //...

Pravidla - příklady ExternalResource public static class UsesExternalResource { Server myserver= new Server(); @Rule public ExternalResource resource= new ExternalResource() { @Override protected void before() throws Throwable { myserver.connect(); ; @Override protected void after() { myserver.disconnect(); ; ; @Test public void testfoo() { new Client().run(myServer);

Anotace Category Slouží k rozdělení testů do různých skupin pomocí štítků @Category(value) Slouží k označení tříd testů či testovacích metod Value je pole libovolných tříd Ke spuštění slouží runner Categories.class K výběru kategorii slouží anotece @IncludeCategory a @ExcludeCategory K určení tříd testů, ze kterých se bude vybírat slouží anotace @SuiteClasses

public interface FastTests { /* category marker */ public interface SlowTests { /* category marker */ public class A { @Test public void a() { fail(); @Category(SlowTests.class) @Test public void b() { @Category({SlowTests.class, FastTests.class) public class B { @Test public void c() { @RunWith(Categories.class) @IncludeCategory(SlowTests.class) @ExcludeCategory(FastTests.class) @SuiteClasses( { A.class, B.class ) // Note that Categories is a kind of Suite public class SlowTestSuite { // Will run A.b, but not A.a or B.c

Spuštění příkazový řádek Spuštení z príkazové řádky: java org.junit.runner.junitcore TestClass1 [...other test classes...] V CLASSPATH musí byt uvedeny cesty: K souborům Junit Ke zdrojovým souborů, včetně tříd s testy K použitým knihovnám

1. Proměnné Spuštění - Ant <property name="bin" value="./bin" /> <property name="lib" value="./lib" /> <property name="junit" value="/path/to/junit.jar" /> <property name="test.class.name" value="mytestsuite" /> 2. CLASSPATH pro JUnit target <path id="test.classpath"> <pathelement location="${classes" /> <pathelement location="${junit" /> <fileset dir="${lib"> <include name="**/*.jar"/> </fileset> </path> 3. Target pro JUnit <target name="test"> <junit fork="yes" haltonfailure="yes"> <test name="${test.class.name" /> <formatter type="plain" usefile="false" /> <classpath refid="test.classpath" /> </junit> </target>

Ant - HTML <property name="report" value="./report" /> <target name="test" depends="compile"> <junit failureproperty="testsfailed"> <classpath refid="test.classpath" /> <formatter type="xml"/> <test name="${test.class.name" todir="${reports"/> </junit> <junitreport todir="${reports"> <fileset dir="${reports"> <include name="**/test-*.xml"/> </fileset> <report format="frames" todir="${reports"/> </junitreport> </target>

Doporučené postupy Testy by měly být psány předem Programujeme pouze to co musíme Testovat by se mělo pouze to, co se může pokazit Testy by se měli pouštět kdykoliv je to možné (alespoň na část kódu, na které pracujeme) Pokud se objeví chyba, nejdříve napíšeme test a až poté opravíme Proč používat JUnit?

Zdroje http://kentbeck.github.com/junit/javadoc/latest/ http://junit.sourceforge.net/doc/cookbook/cookbook.htm http://junit.sourceforge.net/doc/faq/faq.htm https://github.com/kentbeck/junit/wiki