Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού...

12
Μεθοδολογίες Προγραμματισμού ΙΙ Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού Έλεγχος Λογισμικού JUNIT - Test First Design JUNIT - Test First Design Παναγιώτης Σφέτσος, PhD http://aetos.it.teithe.gr/~sfetsos/ [email protected]

description

Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design. Παναγιώτης Σφέτσος , PhD http://aetos.it.teithe.gr/~sfetsos/ [email protected]. Απλό Παράδειγμα …. Εισαγωγή των κλάσεων της junit Η κλάση Ελέγχου Ο δομητής της κλάσης ( κληρονομικότητα) - PowerPoint PPT Presentation

Transcript of Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού...

Page 1: Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design

Μεθοδολογίες Προγραμματισμού ΙΙΜεθοδολογίες Προγραμματισμού ΙΙ

Έλεγχος ΛογισμικούΈλεγχος Λογισμικού

JUNIT - Test First DesignJUNIT - Test First Design

Παναγιώτης Σφέτσος, PhDhttp://aetos.it.teithe.gr/~sfetsos/

[email protected]

Page 2: Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design

Απλό ΠαράδειγμαΑπλό Παράδειγμα….….

2Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

Junit 3.ximport junit.framework.*;

public class ATest extends TestCase{ public ATest(String name) { super(name);}

public void testATest() { int answer = 2; assertEquals((1+1), answer);}}

Εισαγωγή των κλάσεων της junit

Η κλάση Ελέγχου

Ο δομητής της κλάσης (κληρονομικότητα)

Η μέθοδος του Test.

Page 3: Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design

ΠαράδειγμαΠαράδειγμα – BoxVolume (1/3) – BoxVolume (1/3)

3Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

import junit.framework.*;public class BoxTest extends TestCase { class Box { double width; double height; double depth;

Box(double x, double y, double z) { width = x; height = y; depth = z; }

double volume() {return width * height * depth;}}

public void testAdd() { Box mybox1 = new Box(10, 20, 15); Box mybox2 = new Box(3, 6, 9); double vol; vol = mybox1.volume(); assertTrue(vol == 3000.00); vol = mybox2.volume(); assertTrue(vol == 162.00); }}

Page 4: Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design

ΠαράδειγμαΠαράδειγμα – BoxVolume – BoxVolume (2/3)(2/3)

4Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

Προσέξτε τις εντολές assert…

Page 5: Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design

ΠαράδειγμαΠαράδειγμα – BoxVolume – BoxVolume (3/3)(3/3)

5Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

Προσέξτε τις εντολές assert…Λάθος στην πρώτη assert.

Page 6: Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design

ΠαράδειγμαΠαράδειγμα – Junit3.x – Junit3.x

6Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

To 0 ονομάζεται παράγοντας Δέλτα και ορίζεται για ένα σίγουρο αποτέλεσμα (περιθώριο τιμών +/-) στα floating point αποτελέσματα.

import junit.framework.TestCase;

public class TestCalculator extends TestCase

{

public void testAdd()

{

Calculator calc = new Calculator();

double result = calc.add(50,10);

assertEquals(60, result,0);

}

}

Page 7: Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design

ΠαράδειγμαΠαράδειγμα – Junit3.x – Junit3.x

7Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

Page 8: Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design

Junit 3.x vs. Junit 4.xJunit 3.x vs. Junit 4.x

8Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

Στο Junit 3.x είχαμε : 1) κληρονομικότητα (..extends TestCase) 2) κάθε μέθοδος-Test ξεκινά με την δεσμευμένη λέξη test 3) άμεση χρήση των Assert-εντολών

Στο Junit 4.x έχουμε : 1) Annotations μετά την Java 5.0 (..όχι κληρονομικότητα) 2) κάθε μέθοδος-Test δηλώνεται με το annotation @Test 3) χρήση των Assert-εντολών, με την import (δες παρακάτω) 4) έλεγχοι με exceptions π.χ: @Test(expected=IndexOutOfBoundsException.class) 5) έλεγχοι με timeout π.χ: @Test(timeout=1)

Στο Junit 3.x είχαμε : 1) κληρονομικότητα (..extends TestCase) 2) κάθε μέθοδος-Test ξεκινά με την δεσμευμένη λέξη test 3) άμεση χρήση των Assert-εντολών

Στο Junit 4.x έχουμε : 1) Annotations μετά την Java 5.0 (..όχι κληρονομικότητα) 2) κάθε μέθοδος-Test δηλώνεται με το annotation @Test 3) χρήση των Assert-εντολών, με την import (δες παρακάτω) 4) έλεγχοι με exceptions π.χ: @Test(expected=IndexOutOfBoundsException.class) 5) έλεγχοι με timeout π.χ: @Test(timeout=1)

Page 9: Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design

Junit 3.x vs. Junit 4.xJunit 3.x vs. Junit 4.x

9Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

6) παράληψη μεθόδου ελέγχου (και με σχόλιο) π.χ: @Ignore(“to test auto den douleyei akomi..") @Test)

7) ευελιξία : α) @BeforeClass και @AfterClass

β) @Before και @After: αντί των SetUp() και TearDown().

• παραμετρικά tests με την χρήση της @Parameters

• νέα Assert που υποστηρίζει arrays: assertEquals(array1, array2);

6) παράληψη μεθόδου ελέγχου (και με σχόλιο) π.χ: @Ignore(“to test auto den douleyei akomi..") @Test)

7) ευελιξία : α) @BeforeClass και @AfterClass

β) @Before και @After: αντί των SetUp() και TearDown().

• παραμετρικά tests με την χρήση της @Parameters

• νέα Assert που υποστηρίζει arrays: assertEquals(array1, array2);

Page 10: Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design

Junit 3.x vs. Junit 4.xJunit 3.x vs. Junit 4.x

10Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

Εκτελείς ελέγχους Junit4 με τον Junit3 – runner, χρησιμοποιώντας τον Junit4 Adapter:

public static junit.framework.Test suite() { return new JUnit4TestAdapter(SimpleMathTest.class); }

Όπως και για το Junit3 δεν απαιτείται δομητής.

Εκτελείς ελέγχους Junit4 με τον Junit3 – runner, χρησιμοποιώντας τον Junit4 Adapter:

public static junit.framework.Test suite() { return new JUnit4TestAdapter(SimpleMathTest.class); }

Όπως και για το Junit3 δεν απαιτείται δομητής.

Page 11: Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design

Junit 4.0 - Junit 4.0 - παράδειγμαπαράδειγμα – 1/2– 1/2

11Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

import org.junit.*;

import static org.junit.Assert.*;

public class RectangleTest { Rectangle r; Rectangle[] rList=new Rectangle[5];

@Before // Ekteleitai prin apo ka8e Test. public void testSetup() {System.out.println("Arxi/-kopoihsi tou test.");}

@After // Ekteleitai meta apo ka8e Test.

public void testComplete() {System.out.println("Telos tou Test.");}

import org.junit.*;

import static org.junit.Assert.*;

public class RectangleTest { Rectangle r; Rectangle[] rList=new Rectangle[5];

@Before // Ekteleitai prin apo ka8e Test. public void testSetup() {System.out.println("Arxi/-kopoihsi tou test.");}

@After // Ekteleitai meta apo ka8e Test.

public void testComplete() {System.out.println("Telos tou Test.");}

Εισαγωγή των κλάσεων της junit

Εισαγωγή των Assert

Η κλάση Ελέγχου

Πριν από κάθε test

Μετά από κάθε test

Page 12: Μεθοδολογίες Προγραμματισμού ΙΙ Έλεγχος Λογισμικού JUNIT - Test First Design

Junit 4.0 - Junit 4.0 - παράδειγμαπαράδειγμα – 2/2– 2/2

12Παναγιώτης Σφέτσος, Μεθοδολογίες Προγραμματισμού ΙΙ

@Test public void test1() {r=new Rectangle(); try { assertTrue("Test 1: Oi arhikes times einai lathos.",

r.getH()==0 && r.getW()==0); System.out.println("To Test-1 oloklirothike me epityhia."); }

catch (AssertionError e) {System.out.println(e.getMessage()); }

}

@Test public void test1() {r=new Rectangle(); try { assertTrue("Test 1: Oi arhikes times einai lathos.",

r.getH()==0 && r.getW()==0); System.out.println("To Test-1 oloklirothike me epityhia."); }

catch (AssertionError e) {System.out.println(e.getMessage()); }

}

Η μέθοδος Ελέγχου