JUnit 4 - användning. Grunderna. org.junit. org.junit.test. Henrik Bergström DSV SU/KTH. Innehåller bland annat:

Relevanta dokument
JUnit. Junit Unit Testing. JUnit 3. JUnit 3 forts. Villkorskontroller i test. Exempel JUnit3

Versionshantering. Jan Erik Moström

LUNDS TEKNISKA HÖGSKOLA EDAA01 Programmeringsteknik fördjupningskurs Institutionen för datavetenskap HT 2015

Institutionen för datavetenskap HT /2008. Testning med JUnit

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Ni ska ha en uppsättning verktyg som ni kan använda i era fortsatta studier (och även efteråt) Lektion 1. Applikationsprogrammering i Java 7,5 hp

Identitet och ekvivalens

Avancerad användning av JUnit

JAVA Mer om klasser och objektorientering

Reguljära uttryck. Reguljära uttryck. Nu kommer en siffra78 och en till SIFFRA(78) men utan 7kstuga SIFFRA(89)

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Testramverk och Model based testing med java i praktiken

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Att skriva till och läsa från terminalfönstret

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Objektorienterad programmering i Java

Föreläsning 3: Booleans, if, switch

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

Föreläsning 14. Filhantering

Laboration 10 - NetBeans

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Laboration 10 - Eclipse

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Att använda Java SE JDK 6

Tentamen. Lösningsförslag

Tentamen, EDAA10 Programmering i Java

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Klasshierarkier - repetition

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

Tentamen OOP

Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

JAVAUTVECKLING LEKTION 7

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

F4. programmeringsteknik och Matlab

TDDE10 TDDE11, 725G90. Gemensam kurswebsida på:

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

TENTAMEN OOP

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

TENTAMEN OOP

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Föreläsnings 9 - Exceptions, I/O

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Malmö högskola 2007/2008 Teknik och samhälle

Lösningsförslag till tentamen

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Arrayer. results

Tentamen, EDA501 Programmering M L TM W K V

Lösningsförslag övning 2.

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

DAT043 Objektorienterad Programmering

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Föreläsning 23. Tobias Wrigstad. Refaktorering

Lösningar för tenta 2 DAT043,

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Tentamen, EDAA20/EDA501 Programmering

Den som bara har en hammare tror att alla problem är spikar

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Testning. 1DV404, HT14 Jesper Andersson Kap 21 + Testing Primer

Tentamen i Objektorienterad programmering

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Tentamen i Programmeringsteknik I,, KandMa/Fy,

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

OOP Tentamen

Stackar, köer, iteratorer och paket

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

Föreläsning 12: Exempel och problemlösning

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

Objektorienterad Programmering (TDDC77)

Konstruktion av klasser med klasser

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Objektorienterad Programmering (TDDC77)

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Malmö högskola 2008/2009 CTS

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

JAVAUTVECKLING LEKTION 4

Föreläsning Datastrukturer (DAT036)

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Transkript:

JUnit 4 - användning Grunderna Henrik Bergström DSV SU/KTH org.junit org.junit.test Innehåller bland annat: Test Assert Obs! Inte ett paket annotation som berättar att den efterföljande metoden är ett testfall

org.junit.assert Ett enkelt exempel Obs! Inte ett paket Innehåller statiska metoder för att kontrollera om test lyckas Importeras ofta statiskt Köra i Eclipse Testfallen hålls separat

Skapa ett testfall Inställningar JUnit 4 Inställningar Inställningar JUnit 4 Source folder JUnit 4 Source folder Package

Inställningar Inställningar JUnit 4 Source folder Package Namn JUnit 4 Source folder Package Namn Hjälpmetoder Inställningar Skelett JUnit 4 Source folder Package Namn Hjälpmetoder Skelett public void testsetday() { fail("not yet implemented");

Den tomma testklassen De viktigaste import-satserna public class DateTester { import static org.junit.assert.*; import org.junit.test; public class DateTester { Ett par testfall Att köra testfallen public void year() { Date d = new Date(); assertequals(2008, d.getyear()); public void month() { Date d = new Date(); assertequals(1, d.getmonth());

Resultatet Köra manuellt $> javac -classpath src:test:junit-4.4.jar test/datetester.java? http://junit.sourceforge.net/doc/faq/faq.htm#tests_1 public static void main(string args[]) { org.junit.runner.junitcore.main("datetester"); java -classpath src:test:junit-4.4.jar org.junit.runner.junitcore DateTester Testsviter Fler testfall import static org.junit.assert.*; import org.junit.test; public class MoreTests { public void leapyear() { Date d = new Date(2008, 1, 1); assertequals(true, d.isleapyear());

En testsvit Mer om Assert import org.junit.runner.runwith; import org.junit.runners.suite; import org.junit.runners.suite.suiteclasses; @RunWith(value = Suite.class) @SuiteClasses(value = { DateTester.class, MoreTests.class ) public class AllTests { assertequals assertequals(true, d.isleapyear()); Ett problem assertequals(1, 1L); assertequals("felmeddelande", true, d.isleapyear());

Ett problem till (och ett felaktigt testfall) Korrekt lösning (dock fortfarande ett felaktigt testfall) public void fraction() { Date d = new Date(2008, 12, 31); public void fraction2() { Date d = new Date(2008, 12, 31); assertequals(1.4, d.fractionofyear()); assertequals(1.4, d.fractionofyear(), 0.001); asserttrue & assertfalse assertarrayequals int x=5; asserttrue(x<10); assertfalse(x==10); String[] a1 = {"ABC", "BAC"; String[] a2 = {"ABC", "BAC"; assertarrayequals(a1, a2);

assertnull & assertnotnull assertsame & assertnotsame assertnull(o); assertnotnull(o); assertsame(o1, o2); assertnotsame(o1, o2); fail assertthat (nytt från 4.4) fail(); public void testsetday() { fail("not yet implemented"); import static org.hamcrest.corematchers.*; import static org.junit.matchers.junitmatchers.*; public void newassertvariants(){ Date d = new Date(2000, 1, 1); assertthat(d.getyear(), is(2000));

Assumptions (nytt från 4.4) public void assumptions(){ Date d = new Date(2000, 2, 1); assumethat(d.isleapyear(), is(true)); assumetrue public void assumptions2(){ Date d = new Date(2000, 2, 1); assumetrue(d.isleapyear()); assertthat(d.daysinmonth(), is(29)); assertequals(d.daysinmonth(), 29); assertthat(d.daysinmonth(), is(29)); Att sätta upp testmiljön @Before private Date d; @Before public void setup() throws Exception { d=new Date(2008,12,31); public void year() { assertequals(2008, d.getyear());

@After @BeforeClass @After public void teardown() throws Exception {... private static Date d; @BeforeClass public static void setupbeforeclass() throws Exception { d = new Date(2008, 12, 31); @AfterClass Spridda nyttigheter @AfterClass public static void teardownafterclass() throws Exception {...

Undantag: det gamla sättet Undantag: det nya sättet public void exceptionold(){ try{ Date d = new Date(2008, 1, 365); fail(); // Obs viktigt! catch(illegaldateexception e){ (expected=illegaldateexception.class) public void exceptionnew(){ Date d = new Date(2008, 1, 365); Timeout Tillfälligt plocka bort test (timeout=1000) public void longtest(){ // Operation som eventuellt // kan ta tid @Ignore("Testet ignoreras därför att...") public void ignoredtest(){

Flera väldigt lika test Loop-varianten public void testisleapyear() { int[] testyears = { 2000, 4000 ; for (int year : testyears) { Date d = new Date(year, 1, 1); asserttrue("år " + year + " är ett skottår", d.isleapyear()); Parameter-varianten Testfallet @RunWith(value = Parameterized.class) public class ParamLeapYearTester { private int year; public ParamLeapYearTester(int y) { year = y; public void testisleapyear() { Date d = new Date(year, 1, 1); asserttrue("år " + year + " är ett skottår", d.isleapyear());

Parametrarna @Parameters public static Collection leapyearstotest(){ return Arrays.asList( new Integer[][] { { 2000, { 4000 ); Flera paramerar @Parameters public static Collection leapyearstotest(){ return Arrays.asList( new Integer[][] { { 2000, 1, 1, { 4000, 1, 1 ); @Theory (nytt från 4.4) @DataPoint @Theory public void isleapyear(int year) { Date d = new Date(year, 1, 1); assumetrue(year<=2000); asserttrue(d.isleapyear()); @DataPoint public static final int NORMAL_LEAP_YEAR = 1996; @DataPoint public static final int SPECIAL_LEAP_YEAR = 2000; @DataPoint public static final int FUTURE_LEAP_YEAR = 4000;

Kompatibla data RunWith @DataPoint public static final String text = "test"; import static org.junit.assert.*; import org.junit.test; import org.junit.runner.runwith; import org.junit.experimental.theories.datapoint; import org.junit.experimental.theories.theories; import org.junit.experimental.theories.theory; @RunWith(Theories.class) public class JUnit4_4FeaturesPart2 { @Theory eller public void isleapyear2(int year) { Date d = new Date(year, 1, 1); asserttrue(d.isleapyear());